@carbonbox/domain 0.21.2 → 0.23.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 (49) hide show
  1. package/build/carbonbox/emission-calculation-formulas/calculation-variables/domain/entity/CalculationVariable.js +15 -2
  2. package/build/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOption.js +2 -0
  3. package/build/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOptionOptions.js +2 -0
  4. package/build/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOptionPrimitives.js +2 -0
  5. package/build/carbonbox/emission-calculation-formulas/calculation-variables/domain/value-objects/CalculationVariableOptions.js +197 -0
  6. package/build/carbonbox/emission-calculation-results/emission-calculations/domain/entity/EmissionCalculation.js +15 -2
  7. package/build/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionSegment.js +2 -0
  8. package/build/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionSegmentPrimitives.js +2 -0
  9. package/build/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensions.js +2 -0
  10. package/build/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionsPrimitives.js +2 -0
  11. package/build/carbonbox/emission-calculation-results/emission-calculations/domain/value-objects/EmissionCalculationDimensions.js +72 -0
  12. package/build/main/index.js +17 -13
  13. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/entity/CalculationVariable.d.ts +2 -0
  14. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/entity/CalculationVariable.d.ts.map +1 -1
  15. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/entity/ICalculationVariable.d.ts +2 -0
  16. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/entity/ICalculationVariable.d.ts.map +1 -1
  17. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOption.d.ts +8 -0
  18. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOption.d.ts.map +1 -0
  19. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOptionOptions.d.ts +5 -0
  20. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOptionOptions.d.ts.map +1 -0
  21. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOptionPrimitives.d.ts +8 -0
  22. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableOptionPrimitives.d.ts.map +1 -0
  23. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariablePrimitives.d.ts +2 -0
  24. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariablePrimitives.d.ts.map +1 -1
  25. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableProps.d.ts +2 -0
  26. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/types/CalculationVariableProps.d.ts.map +1 -1
  27. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/value-objects/CalculationVariableOptions.d.ts +38 -0
  28. package/build/types/carbonbox/emission-calculation-formulas/calculation-variables/domain/value-objects/CalculationVariableOptions.d.ts.map +1 -0
  29. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/entity/EmissionCalculation.d.ts +2 -0
  30. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/entity/EmissionCalculation.d.ts.map +1 -1
  31. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/entity/IEmissionCalculation.d.ts +2 -0
  32. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/entity/IEmissionCalculation.d.ts.map +1 -1
  33. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionSegment.d.ts +12 -0
  34. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionSegment.d.ts.map +1 -0
  35. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionSegmentPrimitives.d.ts +6 -0
  36. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionSegmentPrimitives.d.ts.map +1 -0
  37. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensions.d.ts +18 -0
  38. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensions.d.ts.map +1 -0
  39. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionsPrimitives.d.ts +10 -0
  40. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionsPrimitives.d.ts.map +1 -0
  41. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationPrimitives.d.ts +2 -0
  42. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationPrimitives.d.ts.map +1 -1
  43. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationProps.d.ts +2 -0
  44. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationProps.d.ts.map +1 -1
  45. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/value-objects/EmissionCalculationDimensions.d.ts +18 -0
  46. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/value-objects/EmissionCalculationDimensions.d.ts.map +1 -0
  47. package/build/types/main/index.d.ts +7 -0
  48. package/build/types/main/index.d.ts.map +1 -1
  49. package/package.json +1 -1
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
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
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _CalculationVariable_code, _CalculationVariable_symbol, _CalculationVariable_name, _CalculationVariable_description, _CalculationVariable_dataType, _CalculationVariable_resolutionStrategy, _CalculationVariable_activityDataConditions, _CalculationVariable_defaultValue;
13
+ var _CalculationVariable_code, _CalculationVariable_symbol, _CalculationVariable_name, _CalculationVariable_description, _CalculationVariable_dataType, _CalculationVariable_resolutionStrategy, _CalculationVariable_activityDataConditions, _CalculationVariable_defaultValue, _CalculationVariable_options;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.CalculationVariable = void 0;
16
16
  const AggregateRoot_1 = require("../../../../shared/domain/entities/AggregateRoot");
@@ -21,6 +21,7 @@ const CalculationVariableDefaultValue_1 = require("../value-objects/CalculationV
21
21
  const CalculationVariableDescription_1 = require("../value-objects/CalculationVariableDescription");
22
22
  const CalculationVariableId_1 = require("../value-objects/CalculationVariableId");
23
23
  const CalculationVariableName_1 = require("../value-objects/CalculationVariableName");
24
+ const CalculationVariableOptions_1 = require("../value-objects/CalculationVariableOptions");
24
25
  const CalculationVariableResolutionStrategy_1 = require("../value-objects/CalculationVariableResolutionStrategy");
25
26
  const CalculationVariableSymbol_1 = require("../value-objects/CalculationVariableSymbol");
26
27
  const InvalidCalculationVariableActivityDataConditionsForStrategyError_1 = require("../exceptions/InvalidCalculationVariableActivityDataConditionsForStrategyError");
@@ -38,6 +39,7 @@ class CalculationVariable extends AggregateRoot_1.AggregateRoot {
38
39
  _CalculationVariable_resolutionStrategy.set(this, void 0);
39
40
  _CalculationVariable_activityDataConditions.set(this, void 0);
40
41
  _CalculationVariable_defaultValue.set(this, void 0);
42
+ _CalculationVariable_options.set(this, void 0);
41
43
  if (skipDomainValidation === false) {
42
44
  // Initialize with domain validation
43
45
  __classPrivateFieldSet(this, _CalculationVariable_code, CalculationVariableCode_1.CalculationVariableCode.create(props.code), "f");
@@ -48,6 +50,9 @@ class CalculationVariable extends AggregateRoot_1.AggregateRoot {
48
50
  __classPrivateFieldSet(this, _CalculationVariable_resolutionStrategy, CalculationVariableResolutionStrategy_1.CalculationVariableResolutionStrategy.create(props.resolutionStrategy), "f");
49
51
  __classPrivateFieldSet(this, _CalculationVariable_activityDataConditions, CalculationVariableActivityDataConditions_1.CalculationVariableActivityDataConditions.create(props.activityDataConditions), "f");
50
52
  __classPrivateFieldSet(this, _CalculationVariable_defaultValue, CalculationVariableDefaultValue_1.CalculationVariableDefaultValue.create(props.defaultValue), "f");
53
+ __classPrivateFieldSet(this, _CalculationVariable_options, props.options !== null
54
+ ? CalculationVariableOptions_1.CalculationVariableOptions.create(props.options)
55
+ : CalculationVariableOptions_1.CalculationVariableOptions.create([]), "f");
51
56
  }
52
57
  else {
53
58
  // Initialize from primitives (no per-VO domain validation)
@@ -59,6 +64,9 @@ class CalculationVariable extends AggregateRoot_1.AggregateRoot {
59
64
  __classPrivateFieldSet(this, _CalculationVariable_resolutionStrategy, CalculationVariableResolutionStrategy_1.CalculationVariableResolutionStrategy.fromPrimitives(props.resolutionStrategy), "f");
60
65
  __classPrivateFieldSet(this, _CalculationVariable_activityDataConditions, CalculationVariableActivityDataConditions_1.CalculationVariableActivityDataConditions.fromPrimitives(props.activityDataConditions), "f");
61
66
  __classPrivateFieldSet(this, _CalculationVariable_defaultValue, CalculationVariableDefaultValue_1.CalculationVariableDefaultValue.fromPrimitives(props.defaultValue), "f");
67
+ __classPrivateFieldSet(this, _CalculationVariable_options, props.options !== null
68
+ ? CalculationVariableOptions_1.CalculationVariableOptions.fromPrimitives(props.options)
69
+ : CalculationVariableOptions_1.CalculationVariableOptions.fromPrimitives([]), "f");
62
70
  }
63
71
  // Cross-field invariant is enforced ALWAYS, even when constructing
64
72
  // via `fromPrimitives`. Per-VO validation can be skipped (because
@@ -82,6 +90,7 @@ class CalculationVariable extends AggregateRoot_1.AggregateRoot {
82
90
  resolutionStrategy: primitives.resolutionStrategy,
83
91
  activityDataConditions: primitives.activityDataConditions,
84
92
  defaultValue: primitives.defaultValue,
93
+ options: primitives.options,
85
94
  };
86
95
  return new CalculationVariable(props, true);
87
96
  }
@@ -96,6 +105,7 @@ class CalculationVariable extends AggregateRoot_1.AggregateRoot {
96
105
  resolutionStrategy: __classPrivateFieldGet(this, _CalculationVariable_resolutionStrategy, "f").toPrimitives(),
97
106
  activityDataConditions: __classPrivateFieldGet(this, _CalculationVariable_activityDataConditions, "f").toPrimitives(),
98
107
  defaultValue: __classPrivateFieldGet(this, _CalculationVariable_defaultValue, "f").toPrimitives(),
108
+ options: __classPrivateFieldGet(this, _CalculationVariable_options, "f").isEmpty() ? null : __classPrivateFieldGet(this, _CalculationVariable_options, "f").toPrimitives(),
99
109
  };
100
110
  }
101
111
  get code() {
@@ -122,6 +132,9 @@ class CalculationVariable extends AggregateRoot_1.AggregateRoot {
122
132
  get defaultValue() {
123
133
  return __classPrivateFieldGet(this, _CalculationVariable_defaultValue, "f");
124
134
  }
135
+ get options() {
136
+ return __classPrivateFieldGet(this, _CalculationVariable_options, "f");
137
+ }
125
138
  /**
126
139
  * Cross-field invariant: the relationship between `resolutionStrategy`
127
140
  * and `activityDataConditions` is owned by the aggregate root, not by
@@ -145,4 +158,4 @@ class CalculationVariable extends AggregateRoot_1.AggregateRoot {
145
158
  }
146
159
  }
147
160
  exports.CalculationVariable = CalculationVariable;
148
- _CalculationVariable_code = new WeakMap(), _CalculationVariable_symbol = new WeakMap(), _CalculationVariable_name = new WeakMap(), _CalculationVariable_description = new WeakMap(), _CalculationVariable_dataType = new WeakMap(), _CalculationVariable_resolutionStrategy = new WeakMap(), _CalculationVariable_activityDataConditions = new WeakMap(), _CalculationVariable_defaultValue = new WeakMap();
161
+ _CalculationVariable_code = new WeakMap(), _CalculationVariable_symbol = new WeakMap(), _CalculationVariable_name = new WeakMap(), _CalculationVariable_description = new WeakMap(), _CalculationVariable_dataType = new WeakMap(), _CalculationVariable_resolutionStrategy = new WeakMap(), _CalculationVariable_activityDataConditions = new WeakMap(), _CalculationVariable_defaultValue = new WeakMap(), _CalculationVariable_options = new WeakMap();
@@ -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,197 @@
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 _a, _CalculationVariableOptions_options, _CalculationVariableOptions_guardAgainstInvalidType, _CalculationVariableOptions_guardAgainstInvalidEmptyArray, _CalculationVariableOptions_guardAgainstDuplicatedValues, _CalculationVariableOptions_guardAgainstDuplicatedDisplayOrders, _CalculationVariableOptions_guardAgainstInvalidOption;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CalculationVariableOptions = void 0;
16
+ const ValueObject_1 = require("../../../../shared/domain/value-objects/ValueObject");
17
+ const String_1 = require("../../../../shared/domain/value-objects/String");
18
+ const PositiveInteger_1 = require("../../../../shared/domain/value-objects/PositiveInteger");
19
+ const InvalidPropertyTypeError_1 = require("../../../../shared/domain/exceptions/InvalidPropertyTypeError");
20
+ const InvalidPropertyValueError_1 = require("../../../../shared/domain/exceptions/InvalidPropertyValueError");
21
+ /**
22
+ * Structured list of selectable options for a `dataType === SELECT` calculation
23
+ * variable (e.g. tipo de combustible: Diesel / Gasolina / Eléctrico). Mirrors the
24
+ * canonical `CollectionFieldOptions` value object (`FieldOption` shape) but lives
25
+ * in the `calculation-variables` bounded context so the two contexts stay
26
+ * independent.
27
+ *
28
+ * The value object is permissive (`allowEmpty: true`): a SELECT variable can exist
29
+ * with an empty list initially. Whether options are required/forbidden for a given
30
+ * `dataType` is an application-layer concern (gated in the Create/Update DTO +
31
+ * handler against `DataTypeEnum.SELECT`), exactly like `CollectionFieldOptions`.
32
+ */
33
+ class CalculationVariableOptions extends ValueObject_1.ValueObject {
34
+ constructor(value, skipDomainValidation, propertyName = _a.DEFAULT_PROPERTY_NAME, options = _a.DEFAULT_OPTIONS) {
35
+ const finalOptions = { ..._a.DEFAULT_OPTIONS, ...options };
36
+ if (skipDomainValidation === false) {
37
+ _a.validateOptions(value, propertyName, finalOptions);
38
+ }
39
+ const primitives = _a.toPrimitivesArray(value);
40
+ super(primitives, skipDomainValidation, propertyName, 'The provided value must be an array of CalculationVariableOption from the domain layer');
41
+ _CalculationVariableOptions_options.set(this, void 0);
42
+ __classPrivateFieldSet(this, _CalculationVariableOptions_options, _a.toCleanOptions(value), "f");
43
+ }
44
+ static create(value) {
45
+ return new _a(value, false);
46
+ }
47
+ static fromPrimitives(primitives) {
48
+ const value = primitives.map((primitive) => ({
49
+ value: primitive.value,
50
+ label: primitive.label,
51
+ displayOrder: primitive.displayOrder,
52
+ isActive: primitive.isActive,
53
+ metadata: primitive.metadata,
54
+ }));
55
+ return new _a(value, true);
56
+ }
57
+ static validateOptions(value, propertyName, options) {
58
+ __classPrivateFieldGet(this, _a, "m", _CalculationVariableOptions_guardAgainstInvalidType).call(this, value, propertyName);
59
+ __classPrivateFieldGet(this, _a, "m", _CalculationVariableOptions_guardAgainstInvalidEmptyArray).call(this, value, options, propertyName);
60
+ if (options.allowDuplicates === false) {
61
+ __classPrivateFieldGet(this, _a, "m", _CalculationVariableOptions_guardAgainstDuplicatedValues).call(this, value, propertyName);
62
+ }
63
+ value.forEach((option, index) => {
64
+ __classPrivateFieldGet(this, _a, "m", _CalculationVariableOptions_guardAgainstInvalidOption).call(this, option, index, propertyName);
65
+ });
66
+ __classPrivateFieldGet(this, _a, "m", _CalculationVariableOptions_guardAgainstDuplicatedDisplayOrders).call(this, value, propertyName);
67
+ }
68
+ static toPrimitivesArray(value) {
69
+ return value.map((option) => ({
70
+ value: option.value.trim(),
71
+ label: option.label.trim(),
72
+ displayOrder: option.displayOrder,
73
+ isActive: option.isActive,
74
+ metadata: option.metadata,
75
+ }));
76
+ }
77
+ static toCleanOptions(value) {
78
+ return value.map((option) => ({
79
+ value: option.value.trim(),
80
+ label: option.label.trim(),
81
+ displayOrder: option.displayOrder,
82
+ isActive: option.isActive,
83
+ metadata: option.metadata,
84
+ }));
85
+ }
86
+ get options() {
87
+ return Object.freeze([...__classPrivateFieldGet(this, _CalculationVariableOptions_options, "f")]);
88
+ }
89
+ get count() {
90
+ return __classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").length;
91
+ }
92
+ isEmpty() {
93
+ return __classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").length === 0;
94
+ }
95
+ hasOptions() {
96
+ return __classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").length > 0;
97
+ }
98
+ getValues() {
99
+ return __classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").map((option) => option.value);
100
+ }
101
+ getByValue(value) {
102
+ return __classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").find((option) => option.value.toUpperCase() === value.trim().toUpperCase());
103
+ }
104
+ hasValue(value) {
105
+ return __classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").some((option) => option.value.toUpperCase() === value.trim().toUpperCase());
106
+ }
107
+ sortByDisplayOrder() {
108
+ return [...__classPrivateFieldGet(this, _CalculationVariableOptions_options, "f")].sort((a, b) => a.displayOrder - b.displayOrder);
109
+ }
110
+ equals(other) {
111
+ if (!(other instanceof _a)) {
112
+ return false;
113
+ }
114
+ if (__classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").length !== __classPrivateFieldGet(other, _CalculationVariableOptions_options, "f").length) {
115
+ return false;
116
+ }
117
+ const thisValues = new Set(this.getValues().map((v) => v.toUpperCase()));
118
+ const otherValues = new Set(other.getValues().map((v) => v.toUpperCase()));
119
+ if (thisValues.size !== otherValues.size) {
120
+ return false;
121
+ }
122
+ for (const value of thisValues) {
123
+ if (otherValues.has(value) === false) {
124
+ return false;
125
+ }
126
+ const thisOption = this.getByValue(value);
127
+ const otherOption = other.getByValue(value);
128
+ if (thisOption?.label !== otherOption?.label
129
+ || thisOption?.displayOrder !== otherOption?.displayOrder
130
+ || thisOption?.isActive !== otherOption?.isActive) {
131
+ return false;
132
+ }
133
+ }
134
+ return true;
135
+ }
136
+ toPrimitives() {
137
+ return __classPrivateFieldGet(this, _CalculationVariableOptions_options, "f").map((option) => ({
138
+ value: option.value,
139
+ label: option.label,
140
+ displayOrder: option.displayOrder,
141
+ isActive: option.isActive,
142
+ metadata: option.metadata,
143
+ }));
144
+ }
145
+ }
146
+ exports.CalculationVariableOptions = CalculationVariableOptions;
147
+ _a = CalculationVariableOptions, _CalculationVariableOptions_options = new WeakMap(), _CalculationVariableOptions_guardAgainstInvalidType = function _CalculationVariableOptions_guardAgainstInvalidType(value, propertyName) {
148
+ if (Array.isArray(value) === false) {
149
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(propertyName, 'array of CalculationVariableOption', typeof value);
150
+ }
151
+ }, _CalculationVariableOptions_guardAgainstInvalidEmptyArray = function _CalculationVariableOptions_guardAgainstInvalidEmptyArray(value, options, propertyName) {
152
+ if (options.allowEmpty === false && value.length === 0) {
153
+ throw InvalidPropertyValueError_1.InvalidPropertyValueError.create(propertyName, 'non-empty array', 'empty array');
154
+ }
155
+ }, _CalculationVariableOptions_guardAgainstDuplicatedValues = function _CalculationVariableOptions_guardAgainstDuplicatedValues(value, propertyName) {
156
+ const values = value.map((option) => option.value.trim().toUpperCase());
157
+ const uniqueValues = new Set(values);
158
+ if (values.length !== uniqueValues.size) {
159
+ throw InvalidPropertyValueError_1.InvalidPropertyValueError.create(`${propertyName}.values`, 'array with unique option values', 'array with duplicated option values');
160
+ }
161
+ }, _CalculationVariableOptions_guardAgainstDuplicatedDisplayOrders = function _CalculationVariableOptions_guardAgainstDuplicatedDisplayOrders(value, propertyName) {
162
+ const displayOrders = value.map((option) => option.displayOrder);
163
+ const uniqueDisplayOrders = new Set(displayOrders);
164
+ if (displayOrders.length !== uniqueDisplayOrders.size) {
165
+ throw InvalidPropertyValueError_1.InvalidPropertyValueError.create(`${propertyName}.displayOrders`, 'array with unique display orders', 'array with duplicated display orders');
166
+ }
167
+ }, _CalculationVariableOptions_guardAgainstInvalidOption = function _CalculationVariableOptions_guardAgainstInvalidOption(option, index, basePropertyName) {
168
+ const propertyName = `${basePropertyName}[${index}]`;
169
+ if (option === null || option === undefined || typeof option !== 'object') {
170
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(propertyName, 'CalculationVariableOption object', typeof option);
171
+ }
172
+ if (typeof option.value !== 'string') {
173
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.value`, 'string', typeof option.value);
174
+ }
175
+ if (typeof option.label !== 'string') {
176
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.label`, 'string', typeof option.label);
177
+ }
178
+ if (typeof option.displayOrder !== 'number') {
179
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.displayOrder`, 'number', typeof option.displayOrder);
180
+ }
181
+ if (typeof option.isActive !== 'boolean') {
182
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.isActive`, 'boolean', typeof option.isActive);
183
+ }
184
+ if (option.metadata !== null && typeof option.metadata !== 'object') {
185
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.metadata`, 'object or null', typeof option.metadata);
186
+ }
187
+ String_1.String.guardAgainstEmptyValue(option.value, `${propertyName}.value`);
188
+ String_1.String.guardAgainstEmptyValue(option.label, `${propertyName}.label`);
189
+ if (!PositiveInteger_1.PositiveInteger.isValidPositiveInteger(option.displayOrder)) {
190
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.displayOrder`, 'positive integer', option.displayOrder.toString());
191
+ }
192
+ };
193
+ CalculationVariableOptions.DEFAULT_PROPERTY_NAME = 'calculationVariableOptions';
194
+ CalculationVariableOptions.DEFAULT_OPTIONS = {
195
+ allowEmpty: true, // SELECT variables can be created without options initially
196
+ allowDuplicates: false, // Option values must be unique
197
+ };
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
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
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _EmissionCalculation_activityDataSubmission, _EmissionCalculation_emissionCalculationFormula, _EmissionCalculation_emissionSource, _EmissionCalculation_carbonClient, _EmissionCalculation_footprintConfiguration, _EmissionCalculation_calculatedAt, _EmissionCalculation_calculatedByStakeholder, _EmissionCalculation_activityDataUncertainty, _EmissionCalculation_emissionFactorUncertainty, _EmissionCalculation_combinedUncertainty, _EmissionCalculation_status, _EmissionCalculation_errorMessage, _EmissionCalculation_calculationNotes;
13
+ var _EmissionCalculation_activityDataSubmission, _EmissionCalculation_emissionCalculationFormula, _EmissionCalculation_emissionSource, _EmissionCalculation_carbonClient, _EmissionCalculation_footprintConfiguration, _EmissionCalculation_calculatedAt, _EmissionCalculation_calculatedByStakeholder, _EmissionCalculation_activityDataUncertainty, _EmissionCalculation_emissionFactorUncertainty, _EmissionCalculation_combinedUncertainty, _EmissionCalculation_status, _EmissionCalculation_errorMessage, _EmissionCalculation_calculationNotes, _EmissionCalculation_dimensions;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.EmissionCalculation = void 0;
16
16
  const AggregateRoot_1 = require("../../../../shared/domain/entities/AggregateRoot");
@@ -21,6 +21,7 @@ const EmissionCalculationCalculatedByStakeholder_1 = require("../value-objects/E
21
21
  const EmissionCalculationCalculationNotes_1 = require("../value-objects/EmissionCalculationCalculationNotes");
22
22
  const EmissionCalculationCarbonClient_1 = require("../value-objects/EmissionCalculationCarbonClient");
23
23
  const EmissionCalculationCombinedUncertainty_1 = require("../value-objects/EmissionCalculationCombinedUncertainty");
24
+ const EmissionCalculationDimensions_1 = require("../value-objects/EmissionCalculationDimensions");
24
25
  const EmissionCalculationEmissionCalculationFormula_1 = require("../value-objects/EmissionCalculationEmissionCalculationFormula");
25
26
  const EmissionCalculationEmissionFactorUncertainty_1 = require("../value-objects/EmissionCalculationEmissionFactorUncertainty");
26
27
  const EmissionCalculationEmissionSource_1 = require("../value-objects/EmissionCalculationEmissionSource");
@@ -47,6 +48,7 @@ class EmissionCalculation extends AggregateRoot_1.AggregateRoot {
47
48
  _EmissionCalculation_status.set(this, void 0);
48
49
  _EmissionCalculation_errorMessage.set(this, void 0);
49
50
  _EmissionCalculation_calculationNotes.set(this, void 0);
51
+ _EmissionCalculation_dimensions.set(this, void 0);
50
52
  if (skipDomainValidation === false) {
51
53
  // Initialize with domain validation
52
54
  __classPrivateFieldSet(this, _EmissionCalculation_activityDataSubmission, EmissionCalculationActivityDataSubmission_1.EmissionCalculationActivityDataSubmission.create(props.activityDataSubmission), "f");
@@ -62,6 +64,9 @@ class EmissionCalculation extends AggregateRoot_1.AggregateRoot {
62
64
  __classPrivateFieldSet(this, _EmissionCalculation_status, EmissionCalculationStatus_1.EmissionCalculationStatus.create(props.status), "f");
63
65
  __classPrivateFieldSet(this, _EmissionCalculation_errorMessage, EmissionCalculationErrorMessage_1.EmissionCalculationErrorMessage.create(props.errorMessage), "f");
64
66
  __classPrivateFieldSet(this, _EmissionCalculation_calculationNotes, EmissionCalculationCalculationNotes_1.EmissionCalculationCalculationNotes.create(props.calculationNotes), "f");
67
+ __classPrivateFieldSet(this, _EmissionCalculation_dimensions, props.dimensions === null
68
+ ? null
69
+ : EmissionCalculationDimensions_1.EmissionCalculationDimensions.create(props.dimensions), "f");
65
70
  }
66
71
  else {
67
72
  // Initialize from primitives (no domain validation)
@@ -78,6 +83,9 @@ class EmissionCalculation extends AggregateRoot_1.AggregateRoot {
78
83
  __classPrivateFieldSet(this, _EmissionCalculation_status, EmissionCalculationStatus_1.EmissionCalculationStatus.fromPrimitives(props.status), "f");
79
84
  __classPrivateFieldSet(this, _EmissionCalculation_errorMessage, EmissionCalculationErrorMessage_1.EmissionCalculationErrorMessage.fromPrimitives(props.errorMessage), "f");
80
85
  __classPrivateFieldSet(this, _EmissionCalculation_calculationNotes, EmissionCalculationCalculationNotes_1.EmissionCalculationCalculationNotes.fromPrimitives(props.calculationNotes), "f");
86
+ __classPrivateFieldSet(this, _EmissionCalculation_dimensions, props.dimensions === null
87
+ ? null
88
+ : EmissionCalculationDimensions_1.EmissionCalculationDimensions.fromPrimitives(props.dimensions), "f");
81
89
  }
82
90
  }
83
91
  static create(props) {
@@ -99,6 +107,7 @@ class EmissionCalculation extends AggregateRoot_1.AggregateRoot {
99
107
  status: primitives.status,
100
108
  errorMessage: primitives.errorMessage,
101
109
  calculationNotes: primitives.calculationNotes,
110
+ dimensions: primitives.dimensions,
102
111
  };
103
112
  return new EmissionCalculation(props, true);
104
113
  }
@@ -118,6 +127,7 @@ class EmissionCalculation extends AggregateRoot_1.AggregateRoot {
118
127
  status: __classPrivateFieldGet(this, _EmissionCalculation_status, "f").toEnum(),
119
128
  errorMessage: __classPrivateFieldGet(this, _EmissionCalculation_errorMessage, "f").toPrimitives(),
120
129
  calculationNotes: __classPrivateFieldGet(this, _EmissionCalculation_calculationNotes, "f").toPrimitives(),
130
+ dimensions: __classPrivateFieldGet(this, _EmissionCalculation_dimensions, "f") === null ? null : __classPrivateFieldGet(this, _EmissionCalculation_dimensions, "f").toPrimitives(),
121
131
  };
122
132
  }
123
133
  get activityDataSubmission() {
@@ -159,6 +169,9 @@ class EmissionCalculation extends AggregateRoot_1.AggregateRoot {
159
169
  get calculationNotes() {
160
170
  return __classPrivateFieldGet(this, _EmissionCalculation_calculationNotes, "f");
161
171
  }
172
+ get dimensions() {
173
+ return __classPrivateFieldGet(this, _EmissionCalculation_dimensions, "f");
174
+ }
162
175
  }
163
176
  exports.EmissionCalculation = EmissionCalculation;
164
- _EmissionCalculation_activityDataSubmission = new WeakMap(), _EmissionCalculation_emissionCalculationFormula = new WeakMap(), _EmissionCalculation_emissionSource = new WeakMap(), _EmissionCalculation_carbonClient = new WeakMap(), _EmissionCalculation_footprintConfiguration = new WeakMap(), _EmissionCalculation_calculatedAt = new WeakMap(), _EmissionCalculation_calculatedByStakeholder = new WeakMap(), _EmissionCalculation_activityDataUncertainty = new WeakMap(), _EmissionCalculation_emissionFactorUncertainty = new WeakMap(), _EmissionCalculation_combinedUncertainty = new WeakMap(), _EmissionCalculation_status = new WeakMap(), _EmissionCalculation_errorMessage = new WeakMap(), _EmissionCalculation_calculationNotes = new WeakMap();
177
+ _EmissionCalculation_activityDataSubmission = new WeakMap(), _EmissionCalculation_emissionCalculationFormula = new WeakMap(), _EmissionCalculation_emissionSource = new WeakMap(), _EmissionCalculation_carbonClient = new WeakMap(), _EmissionCalculation_footprintConfiguration = new WeakMap(), _EmissionCalculation_calculatedAt = new WeakMap(), _EmissionCalculation_calculatedByStakeholder = new WeakMap(), _EmissionCalculation_activityDataUncertainty = new WeakMap(), _EmissionCalculation_emissionFactorUncertainty = new WeakMap(), _EmissionCalculation_combinedUncertainty = new WeakMap(), _EmissionCalculation_status = new WeakMap(), _EmissionCalculation_errorMessage = new WeakMap(), _EmissionCalculation_calculationNotes = new WeakMap(), _EmissionCalculation_dimensions = new WeakMap();
@@ -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,72 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ 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");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _a, _EmissionCalculationDimensions_validate, _EmissionCalculationDimensions_validateSegment, _EmissionCalculationDimensions_toPrimitives;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EmissionCalculationDimensions = void 0;
10
+ const ValueObject_1 = require("../../../../shared/domain/value-objects/ValueObject");
11
+ const String_1 = require("../../../../shared/domain/value-objects/String");
12
+ const InvalidPropertyTypeError_1 = require("../../../../shared/domain/exceptions/InvalidPropertyTypeError");
13
+ /**
14
+ * Value object wrapping the dimensional attributes denormalized on the
15
+ * EmissionCalculation at calculation time (CALC-001). Required string
16
+ * fields (`emissionScope`, `periodStart`, segment `id/name/code`) are
17
+ * validated non-empty; `subScope`, `subsegment` and `country` are nullable.
18
+ */
19
+ class EmissionCalculationDimensions extends ValueObject_1.ValueObject {
20
+ constructor(value, skipDomainValidation) {
21
+ if (skipDomainValidation === false) {
22
+ __classPrivateFieldGet(_a, _a, "m", _EmissionCalculationDimensions_validate).call(_a, value);
23
+ }
24
+ super(__classPrivateFieldGet(_a, _a, "m", _EmissionCalculationDimensions_toPrimitives).call(_a, value), skipDomainValidation, _a.PROPERTY_NAME, 'The provided value must be a valid EmissionCalculationDimensions object');
25
+ }
26
+ static create(value) {
27
+ return new _a(value, false);
28
+ }
29
+ static fromPrimitives(primitives) {
30
+ return new _a(primitives, true);
31
+ }
32
+ toPrimitives() {
33
+ return this.value;
34
+ }
35
+ }
36
+ exports.EmissionCalculationDimensions = EmissionCalculationDimensions;
37
+ _a = EmissionCalculationDimensions, _EmissionCalculationDimensions_validate = function _EmissionCalculationDimensions_validate(value) {
38
+ if (value === null || value === undefined || typeof value !== 'object') {
39
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(_a.PROPERTY_NAME, 'EmissionCalculationDimensions object', typeof value);
40
+ }
41
+ String_1.String.guardAgainstEmptyValue(value.emissionScope, `${_a.PROPERTY_NAME}.emissionScope`);
42
+ String_1.String.guardAgainstEmptyValue(value.periodStart, `${_a.PROPERTY_NAME}.periodStart`);
43
+ __classPrivateFieldGet(_a, _a, "m", _EmissionCalculationDimensions_validateSegment).call(_a, value.segment, 'segment');
44
+ if (value.subsegment !== null) {
45
+ __classPrivateFieldGet(_a, _a, "m", _EmissionCalculationDimensions_validateSegment).call(_a, value.subsegment, 'subsegment');
46
+ }
47
+ if (value.subScope !== null && typeof value.subScope !== 'string') {
48
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${_a.PROPERTY_NAME}.subScope`, 'string or null', typeof value.subScope);
49
+ }
50
+ if (value.country !== null && typeof value.country !== 'string') {
51
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${_a.PROPERTY_NAME}.country`, 'string or null', typeof value.country);
52
+ }
53
+ }, _EmissionCalculationDimensions_validateSegment = function _EmissionCalculationDimensions_validateSegment(segment, field) {
54
+ if (segment === null || segment === undefined || typeof segment !== 'object') {
55
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${_a.PROPERTY_NAME}.${field}`, '{ id, name, code } object', typeof segment);
56
+ }
57
+ String_1.String.guardAgainstEmptyValue(segment.id, `${_a.PROPERTY_NAME}.${field}.id`);
58
+ String_1.String.guardAgainstEmptyValue(segment.name, `${_a.PROPERTY_NAME}.${field}.name`);
59
+ String_1.String.guardAgainstEmptyValue(segment.code, `${_a.PROPERTY_NAME}.${field}.code`);
60
+ }, _EmissionCalculationDimensions_toPrimitives = function _EmissionCalculationDimensions_toPrimitives(value) {
61
+ return {
62
+ emissionScope: value.emissionScope,
63
+ subScope: value.subScope,
64
+ segment: { id: value.segment.id, name: value.segment.name, code: value.segment.code },
65
+ subsegment: value.subsegment === null
66
+ ? null
67
+ : { id: value.subsegment.id, name: value.subsegment.name, code: value.subsegment.code },
68
+ periodStart: value.periodStart,
69
+ country: value.country,
70
+ };
71
+ };
72
+ EmissionCalculationDimensions.PROPERTY_NAME = 'dimensions';