@carbonbox/domain 0.44.0 → 0.46.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 (66) hide show
  1. package/build/carbonbox/activity-data-collection/activity-data-submissions/domain/entity/ActivityDataSubmission.js +24 -2
  2. package/build/carbonbox/activity-data-collection/activity-data-submissions/domain/exceptions/InvalidActivityDataSubmissionFacilityError.js +31 -0
  3. package/build/carbonbox/activity-data-collection/activity-data-submissions/domain/value-objects/ActivityDataSubmissionFacility.js +25 -0
  4. package/build/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/entity/CorporateCarbonFootprintConfiguration.js +10 -10
  5. package/build/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/value-objects/CorporateCarbonFootprintConfigurationFacilities.js +24 -0
  6. package/build/carbonbox/emission-calculation-results/emission-calculations/domain/value-objects/EmissionCalculationDimensions.js +5 -1
  7. package/build/carbonbox/emission-calculation-results/ghg-emission-results/domain/entity/GHGEmissionResult.js +7 -0
  8. package/build/carbonbox/emission-calculation-results/ghg-emission-results/domain/value-objects/GHGEmissionResultGreenhouseGas.js +12 -0
  9. package/build/carbonbox/reporting/shared/domain/enums/DataBindingSource.js +3 -2
  10. package/build/carbonbox/shared/domain/enums/ErrorCode.js +3 -1
  11. package/build/carbonbox/shared/domain/types/FacilityReferencesOptions.js +2 -0
  12. package/build/carbonbox/shared/domain/value-objects/FacilityReferences.js +224 -0
  13. package/build/carbonbox/shared/domain/value-objects/GreenhouseGasSpecies.js +17 -0
  14. package/build/carbonbox/shared/domain/value-objects/NullableFacilityReference.js +139 -0
  15. package/build/main/index.js +30 -22
  16. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/entity/ActivityDataSubmission.d.ts +10 -0
  17. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/entity/ActivityDataSubmission.d.ts.map +1 -1
  18. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/entity/IActivityDataSubmission.d.ts +2 -0
  19. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/entity/IActivityDataSubmission.d.ts.map +1 -1
  20. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/exceptions/InvalidActivityDataSubmissionFacilityError.d.ts +7 -0
  21. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/exceptions/InvalidActivityDataSubmissionFacilityError.d.ts.map +1 -0
  22. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/types/ActivityDataSubmissionPrimitives.d.ts +2 -0
  23. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/types/ActivityDataSubmissionPrimitives.d.ts.map +1 -1
  24. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/types/ActivityDataSubmissionProps.d.ts +2 -0
  25. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/types/ActivityDataSubmissionProps.d.ts.map +1 -1
  26. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/value-objects/ActivityDataSubmissionFacility.d.ts +15 -0
  27. package/build/types/carbonbox/activity-data-collection/activity-data-submissions/domain/value-objects/ActivityDataSubmissionFacility.d.ts.map +1 -0
  28. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/entity/CorporateCarbonFootprintConfiguration.d.ts +2 -2
  29. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/entity/CorporateCarbonFootprintConfiguration.d.ts.map +1 -1
  30. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/entity/ICorporateCarbonFootprintConfiguration.d.ts +2 -2
  31. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/entity/ICorporateCarbonFootprintConfiguration.d.ts.map +1 -1
  32. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/repository/ICorporateCarbonFootprintConfigurationRepository.d.ts +2 -2
  33. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/repository/ICorporateCarbonFootprintConfigurationRepository.d.ts.map +1 -1
  34. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/types/CorporateCarbonFootprintConfigurationPrimitives.d.ts +1 -1
  35. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/types/CorporateCarbonFootprintConfigurationPrimitives.d.ts.map +1 -1
  36. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/types/CorporateCarbonFootprintConfigurationProps.d.ts +1 -1
  37. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/types/CorporateCarbonFootprintConfigurationProps.d.ts.map +1 -1
  38. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/value-objects/{CorporateCarbonFootprintConfigurationFacility.d.ts → CorporateCarbonFootprintConfigurationFacilities.d.ts} +6 -6
  39. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/value-objects/CorporateCarbonFootprintConfigurationFacilities.d.ts.map +1 -0
  40. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensions.d.ts +1 -0
  41. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensions.d.ts.map +1 -1
  42. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionsPrimitives.d.ts +1 -0
  43. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/types/EmissionCalculationDimensionsPrimitives.d.ts.map +1 -1
  44. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/value-objects/EmissionCalculationDimensions.d.ts +1 -1
  45. package/build/types/carbonbox/emission-calculation-results/emission-calculations/domain/value-objects/EmissionCalculationDimensions.d.ts.map +1 -1
  46. package/build/types/carbonbox/emission-calculation-results/ghg-emission-results/domain/entity/GHGEmissionResult.d.ts +5 -0
  47. package/build/types/carbonbox/emission-calculation-results/ghg-emission-results/domain/entity/GHGEmissionResult.d.ts.map +1 -1
  48. package/build/types/carbonbox/emission-calculation-results/ghg-emission-results/domain/value-objects/GHGEmissionResultGreenhouseGas.d.ts +8 -0
  49. package/build/types/carbonbox/emission-calculation-results/ghg-emission-results/domain/value-objects/GHGEmissionResultGreenhouseGas.d.ts.map +1 -1
  50. package/build/types/carbonbox/reporting/shared/domain/enums/DataBindingSource.d.ts +1 -1
  51. package/build/types/carbonbox/reporting/shared/domain/enums/DataBindingSource.d.ts.map +1 -1
  52. package/build/types/carbonbox/shared/domain/enums/ErrorCode.d.ts +2 -1
  53. package/build/types/carbonbox/shared/domain/enums/ErrorCode.d.ts.map +1 -1
  54. package/build/types/carbonbox/shared/domain/types/FacilityReferencesOptions.d.ts +4 -0
  55. package/build/types/carbonbox/shared/domain/types/FacilityReferencesOptions.d.ts.map +1 -0
  56. package/build/types/carbonbox/shared/domain/value-objects/FacilityReferences.d.ts +104 -0
  57. package/build/types/carbonbox/shared/domain/value-objects/FacilityReferences.d.ts.map +1 -0
  58. package/build/types/carbonbox/shared/domain/value-objects/GreenhouseGasSpecies.d.ts +13 -0
  59. package/build/types/carbonbox/shared/domain/value-objects/GreenhouseGasSpecies.d.ts.map +1 -1
  60. package/build/types/carbonbox/shared/domain/value-objects/NullableFacilityReference.d.ts +28 -0
  61. package/build/types/carbonbox/shared/domain/value-objects/NullableFacilityReference.d.ts.map +1 -0
  62. package/build/types/main/index.d.ts +6 -1
  63. package/build/types/main/index.d.ts.map +1 -1
  64. package/package.json +54 -54
  65. package/build/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/value-objects/CorporateCarbonFootprintConfigurationFacility.js +0 -24
  66. package/build/types/carbonbox/carbon-footprint-configurations/corporate-configurations/domain/value-objects/CorporateCarbonFootprintConfigurationFacility.d.ts.map +0 -1
@@ -10,16 +10,19 @@ 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 _ActivityDataSubmission_dynamicFormCode, _ActivityDataSubmission_carbonClient, _ActivityDataSubmission_footprintType, _ActivityDataSubmission_country, _ActivityDataSubmission_footprintConfiguration, _ActivityDataSubmission_segmentConfiguration, _ActivityDataSubmission_filledByStakeholder, _ActivityDataSubmission_fieldResponses, _ActivityDataSubmission_periodStart, _ActivityDataSubmission_periodEnd, _ActivityDataSubmission_overallUncertaintyPercentage, _ActivityDataSubmission_uncertaintySource, _ActivityDataSubmission_dataQualityNotes, _ActivityDataSubmission_reportingStandard, _ActivityDataSubmission_emissionScope, _ActivityDataSubmission_subScope, _ActivityDataSubmission_status, _ActivityDataSubmission_submittedAt, _ActivityDataSubmission_approvedAt, _ActivityDataSubmission_rejectedAt, _ActivityDataSubmission_rejectionReason;
13
+ var _ActivityDataSubmission_dynamicFormCode, _ActivityDataSubmission_carbonClient, _ActivityDataSubmission_footprintType, _ActivityDataSubmission_country, _ActivityDataSubmission_footprintConfiguration, _ActivityDataSubmission_segmentConfiguration, _ActivityDataSubmission_facility, _ActivityDataSubmission_filledByStakeholder, _ActivityDataSubmission_fieldResponses, _ActivityDataSubmission_periodStart, _ActivityDataSubmission_periodEnd, _ActivityDataSubmission_overallUncertaintyPercentage, _ActivityDataSubmission_uncertaintySource, _ActivityDataSubmission_dataQualityNotes, _ActivityDataSubmission_reportingStandard, _ActivityDataSubmission_emissionScope, _ActivityDataSubmission_subScope, _ActivityDataSubmission_status, _ActivityDataSubmission_submittedAt, _ActivityDataSubmission_approvedAt, _ActivityDataSubmission_rejectedAt, _ActivityDataSubmission_rejectionReason;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.ActivityDataSubmission = void 0;
16
16
  const AggregateRoot_1 = require("../../../../shared/domain/entities/AggregateRoot");
17
17
  const InvalidPropertyValueError_1 = require("../../../../shared/domain/exceptions/InvalidPropertyValueError");
18
+ const CarbonFootprint_1 = require("../../../../carbon-footprint-configurations/shared/domain/enums/CarbonFootprint");
19
+ const InvalidActivityDataSubmissionFacilityError_1 = require("../exceptions/InvalidActivityDataSubmissionFacilityError");
18
20
  const ActivityDataSubmissionApprovedAt_1 = require("../value-objects/ActivityDataSubmissionApprovedAt");
19
21
  const ActivityDataSubmissionCarbonClient_1 = require("../value-objects/ActivityDataSubmissionCarbonClient");
20
22
  const ActivityDataSubmissionDataQualityNotes_1 = require("../value-objects/ActivityDataSubmissionDataQualityNotes");
21
23
  const ActivityDataSubmissionDynamicFormCode_1 = require("../value-objects/ActivityDataSubmissionDynamicFormCode");
22
24
  const ActivityDataSubmissionEmissionScope_1 = require("../value-objects/ActivityDataSubmissionEmissionScope");
25
+ const ActivityDataSubmissionFacility_1 = require("../value-objects/ActivityDataSubmissionFacility");
23
26
  const ActivityDataSubmissionFieldResponses_1 = require("../value-objects/ActivityDataSubmissionFieldResponses");
24
27
  const ActivityDataSubmissionFilledByStakeholder_1 = require("../value-objects/ActivityDataSubmissionFilledByStakeholder");
25
28
  const ActivityDataSubmissionFootprintType_1 = require("../value-objects/ActivityDataSubmissionFootprintType");
@@ -49,6 +52,7 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
49
52
  _ActivityDataSubmission_country.set(this, void 0);
50
53
  _ActivityDataSubmission_footprintConfiguration.set(this, void 0);
51
54
  _ActivityDataSubmission_segmentConfiguration.set(this, void 0);
55
+ _ActivityDataSubmission_facility.set(this, void 0);
52
56
  _ActivityDataSubmission_filledByStakeholder.set(this, void 0);
53
57
  _ActivityDataSubmission_fieldResponses.set(this, void 0);
54
58
  _ActivityDataSubmission_periodStart.set(this, void 0);
@@ -71,6 +75,7 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
71
75
  __classPrivateFieldSet(this, _ActivityDataSubmission_country, ActivityDataSubmissionCountry_1.ActivityDataSubmissionCountry.create(props.country), "f");
72
76
  __classPrivateFieldSet(this, _ActivityDataSubmission_footprintConfiguration, ActivityDataSubmissionFootprintConfiguration_1.ActivityDataSubmissionFootprintConfiguration.create(props.footprintConfiguration), "f");
73
77
  __classPrivateFieldSet(this, _ActivityDataSubmission_segmentConfiguration, ActivityDataSubmissionSegmentConfiguration_1.ActivityDataSubmissionSegmentConfiguration.create(props.segmentConfiguration), "f");
78
+ __classPrivateFieldSet(this, _ActivityDataSubmission_facility, ActivityDataSubmissionFacility_1.ActivityDataSubmissionFacility.create(props.facility), "f");
74
79
  __classPrivateFieldSet(this, _ActivityDataSubmission_filledByStakeholder, ActivityDataSubmissionFilledByStakeholder_1.ActivityDataSubmissionFilledByStakeholder.create(props.filledByStakeholder), "f");
75
80
  __classPrivateFieldSet(this, _ActivityDataSubmission_fieldResponses, ActivityDataSubmissionFieldResponses_1.ActivityDataSubmissionFieldResponses.create(props.fieldResponses), "f");
76
81
  __classPrivateFieldSet(this, _ActivityDataSubmission_periodStart, ActivityDataSubmissionPeriodStart_1.ActivityDataSubmissionPeriodStart.create(props.periodStart), "f");
@@ -87,6 +92,7 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
87
92
  __classPrivateFieldSet(this, _ActivityDataSubmission_rejectedAt, ActivityDataSubmissionRejectedAt_1.ActivityDataSubmissionRejectedAt.create(props.rejectedAt), "f");
88
93
  __classPrivateFieldSet(this, _ActivityDataSubmission_rejectionReason, ActivityDataSubmissionRejectionReason_1.ActivityDataSubmissionRejectionReason.create(props.rejectionReason), "f");
89
94
  ActivityDataSubmission.guardAgainstInvalidPeriodRange(props.periodStart, props.periodEnd);
95
+ ActivityDataSubmission.guardAgainstFacilityOnNonCorporateFootprint(props.facility, props.footprintType);
90
96
  }
91
97
  else {
92
98
  __classPrivateFieldSet(this, _ActivityDataSubmission_dynamicFormCode, ActivityDataSubmissionDynamicFormCode_1.ActivityDataSubmissionDynamicFormCode.fromPrimitives(props.dynamicFormCode), "f");
@@ -95,6 +101,7 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
95
101
  __classPrivateFieldSet(this, _ActivityDataSubmission_country, ActivityDataSubmissionCountry_1.ActivityDataSubmissionCountry.fromPrimitives(props.country), "f");
96
102
  __classPrivateFieldSet(this, _ActivityDataSubmission_footprintConfiguration, ActivityDataSubmissionFootprintConfiguration_1.ActivityDataSubmissionFootprintConfiguration.fromPrimitives(props.footprintConfiguration), "f");
97
103
  __classPrivateFieldSet(this, _ActivityDataSubmission_segmentConfiguration, ActivityDataSubmissionSegmentConfiguration_1.ActivityDataSubmissionSegmentConfiguration.fromPrimitives(props.segmentConfiguration), "f");
104
+ __classPrivateFieldSet(this, _ActivityDataSubmission_facility, ActivityDataSubmissionFacility_1.ActivityDataSubmissionFacility.fromPrimitives(props.facility), "f");
98
105
  __classPrivateFieldSet(this, _ActivityDataSubmission_filledByStakeholder, ActivityDataSubmissionFilledByStakeholder_1.ActivityDataSubmissionFilledByStakeholder.fromPrimitives(props.filledByStakeholder), "f");
99
106
  __classPrivateFieldSet(this, _ActivityDataSubmission_fieldResponses, ActivityDataSubmissionFieldResponses_1.ActivityDataSubmissionFieldResponses.fromPrimitives(props.fieldResponses), "f");
100
107
  __classPrivateFieldSet(this, _ActivityDataSubmission_periodStart, ActivityDataSubmissionPeriodStart_1.ActivityDataSubmissionPeriodStart.fromPrimitives(props.periodStart), "f");
@@ -112,6 +119,16 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
112
119
  __classPrivateFieldSet(this, _ActivityDataSubmission_rejectionReason, ActivityDataSubmissionRejectionReason_1.ActivityDataSubmissionRejectionReason.fromPrimitives(props.rejectionReason), "f");
113
120
  }
114
121
  }
122
+ /**
123
+ * A facility attributes the activity data to one site of a corporate inventory. Product and
124
+ * event footprints measure a product / event edition, so they never carry a facility.
125
+ * `null` on a corporate submission means the data is reported at corporate level.
126
+ */
127
+ static guardAgainstFacilityOnNonCorporateFootprint(facility, footprintType) {
128
+ if (facility !== null && footprintType !== CarbonFootprint_1.CarbonFootprint.CORPORATE) {
129
+ throw InvalidActivityDataSubmissionFacilityError_1.InvalidActivityDataSubmissionFacilityError.create(facility.id, footprintType);
130
+ }
131
+ }
115
132
  /**
116
133
  * Validates that the reporting period range is coherent (`periodStart <= periodEnd`).
117
134
  * Dates are in canonical DD/MM/YYYY format (project convention DT-2).
@@ -140,6 +157,7 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
140
157
  country: primitives.country,
141
158
  footprintConfiguration: primitives.footprintConfiguration,
142
159
  segmentConfiguration: primitives.segmentConfiguration,
160
+ facility: primitives.facility,
143
161
  filledByStakeholder: primitives.filledByStakeholder,
144
162
  fieldResponses: primitives.fieldResponses,
145
163
  periodStart: primitives.periodStart,
@@ -167,6 +185,7 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
167
185
  country: __classPrivateFieldGet(this, _ActivityDataSubmission_country, "f").toEnum(),
168
186
  footprintConfiguration: __classPrivateFieldGet(this, _ActivityDataSubmission_footprintConfiguration, "f").toPrimitives(),
169
187
  segmentConfiguration: __classPrivateFieldGet(this, _ActivityDataSubmission_segmentConfiguration, "f").toPrimitives(),
188
+ facility: __classPrivateFieldGet(this, _ActivityDataSubmission_facility, "f").toPrimitives(),
170
189
  filledByStakeholder: __classPrivateFieldGet(this, _ActivityDataSubmission_filledByStakeholder, "f").toPrimitives(),
171
190
  fieldResponses: __classPrivateFieldGet(this, _ActivityDataSubmission_fieldResponses, "f").toPrimitives(),
172
191
  periodStart: __classPrivateFieldGet(this, _ActivityDataSubmission_periodStart, "f").toPrimitives(),
@@ -202,6 +221,9 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
202
221
  get segmentConfiguration() {
203
222
  return __classPrivateFieldGet(this, _ActivityDataSubmission_segmentConfiguration, "f");
204
223
  }
224
+ get facility() {
225
+ return __classPrivateFieldGet(this, _ActivityDataSubmission_facility, "f");
226
+ }
205
227
  get filledByStakeholder() {
206
228
  return __classPrivateFieldGet(this, _ActivityDataSubmission_filledByStakeholder, "f");
207
229
  }
@@ -249,4 +271,4 @@ class ActivityDataSubmission extends AggregateRoot_1.AggregateRoot {
249
271
  }
250
272
  }
251
273
  exports.ActivityDataSubmission = ActivityDataSubmission;
252
- _ActivityDataSubmission_dynamicFormCode = new WeakMap(), _ActivityDataSubmission_carbonClient = new WeakMap(), _ActivityDataSubmission_footprintType = new WeakMap(), _ActivityDataSubmission_country = new WeakMap(), _ActivityDataSubmission_footprintConfiguration = new WeakMap(), _ActivityDataSubmission_segmentConfiguration = new WeakMap(), _ActivityDataSubmission_filledByStakeholder = new WeakMap(), _ActivityDataSubmission_fieldResponses = new WeakMap(), _ActivityDataSubmission_periodStart = new WeakMap(), _ActivityDataSubmission_periodEnd = new WeakMap(), _ActivityDataSubmission_overallUncertaintyPercentage = new WeakMap(), _ActivityDataSubmission_uncertaintySource = new WeakMap(), _ActivityDataSubmission_dataQualityNotes = new WeakMap(), _ActivityDataSubmission_reportingStandard = new WeakMap(), _ActivityDataSubmission_emissionScope = new WeakMap(), _ActivityDataSubmission_subScope = new WeakMap(), _ActivityDataSubmission_status = new WeakMap(), _ActivityDataSubmission_submittedAt = new WeakMap(), _ActivityDataSubmission_approvedAt = new WeakMap(), _ActivityDataSubmission_rejectedAt = new WeakMap(), _ActivityDataSubmission_rejectionReason = new WeakMap();
274
+ _ActivityDataSubmission_dynamicFormCode = new WeakMap(), _ActivityDataSubmission_carbonClient = new WeakMap(), _ActivityDataSubmission_footprintType = new WeakMap(), _ActivityDataSubmission_country = new WeakMap(), _ActivityDataSubmission_footprintConfiguration = new WeakMap(), _ActivityDataSubmission_segmentConfiguration = new WeakMap(), _ActivityDataSubmission_facility = new WeakMap(), _ActivityDataSubmission_filledByStakeholder = new WeakMap(), _ActivityDataSubmission_fieldResponses = new WeakMap(), _ActivityDataSubmission_periodStart = new WeakMap(), _ActivityDataSubmission_periodEnd = new WeakMap(), _ActivityDataSubmission_overallUncertaintyPercentage = new WeakMap(), _ActivityDataSubmission_uncertaintySource = new WeakMap(), _ActivityDataSubmission_dataQualityNotes = new WeakMap(), _ActivityDataSubmission_reportingStandard = new WeakMap(), _ActivityDataSubmission_emissionScope = new WeakMap(), _ActivityDataSubmission_subScope = new WeakMap(), _ActivityDataSubmission_status = new WeakMap(), _ActivityDataSubmission_submittedAt = new WeakMap(), _ActivityDataSubmission_approvedAt = new WeakMap(), _ActivityDataSubmission_rejectedAt = new WeakMap(), _ActivityDataSubmission_rejectionReason = new WeakMap();
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvalidActivityDataSubmissionFacilityError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ const CarbonFootprint_1 = require("../../../../carbon-footprint-configurations/shared/domain/enums/CarbonFootprint");
7
+ class InvalidActivityDataSubmissionFacilityError extends CodedRootError_1.CodedRootError {
8
+ constructor(facilityId, receivedFootprintType) {
9
+ const technicalMessage = `Invalid activity data submission facility '${facilityId}': a facility can only be assigned to a ${CarbonFootprint_1.CarbonFootprint.CORPORATE} footprint submission, received footprint type '${receivedFootprintType}'.`;
10
+ const context = {
11
+ facilityId,
12
+ receivedFootprintType,
13
+ allowedFootprintType: CarbonFootprint_1.CarbonFootprint.CORPORATE,
14
+ timestamp: new Date().toISOString(),
15
+ };
16
+ const suggestions = [
17
+ 'Send facility as null for PRODUCT and EVENT footprint submissions',
18
+ 'Assign a facility only when the submission belongs to a CORPORATE footprint configuration',
19
+ 'Use null on a CORPORATE submission to report the activity data at corporate level',
20
+ ];
21
+ super(ErrorCode_1.ErrorCode.INVALID_SUBMISSION_FACILITY, technicalMessage, context, suggestions);
22
+ this.name = 'InvalidActivityDataSubmissionFacilityError';
23
+ }
24
+ static create(facilityId, receivedFootprintType) {
25
+ return new InvalidActivityDataSubmissionFacilityError(facilityId, receivedFootprintType);
26
+ }
27
+ logError() {
28
+ return `${this.name}: ${this.technicalMessage}`;
29
+ }
30
+ }
31
+ exports.InvalidActivityDataSubmissionFacilityError = InvalidActivityDataSubmissionFacilityError;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActivityDataSubmissionFacility = void 0;
4
+ const NullableFacilityReference_1 = require("../../../../shared/domain/value-objects/NullableFacilityReference");
5
+ /**
6
+ * Sede a la que se imputa el dato de actividad. `null` significa "Nivel Corporativo":
7
+ * el dato pertenece a la organización y no a una sede concreta.
8
+ */
9
+ class ActivityDataSubmissionFacility extends NullableFacilityReference_1.NullableFacilityReference {
10
+ constructor(value, skipDomainValidation) {
11
+ super(value, skipDomainValidation, ActivityDataSubmissionFacility.PROPERTY_NAME);
12
+ }
13
+ static create(value) {
14
+ return new ActivityDataSubmissionFacility(value, false);
15
+ }
16
+ static fromPrimitives(primitives) {
17
+ const value = primitives;
18
+ return new ActivityDataSubmissionFacility(value, true);
19
+ }
20
+ toPrimitives() {
21
+ return this.value;
22
+ }
23
+ }
24
+ exports.ActivityDataSubmissionFacility = ActivityDataSubmissionFacility;
25
+ ActivityDataSubmissionFacility.PROPERTY_NAME = 'facility';
@@ -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 _CorporateCarbonFootprintConfiguration_facility, _CorporateCarbonFootprintConfiguration_executionPeriod, _CorporateCarbonFootprintConfiguration_baseYear, _CorporateCarbonFootprintConfiguration_segmentConfigurations;
13
+ var _CorporateCarbonFootprintConfiguration_facilities, _CorporateCarbonFootprintConfiguration_executionPeriod, _CorporateCarbonFootprintConfiguration_baseYear, _CorporateCarbonFootprintConfiguration_segmentConfigurations;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.CorporateCarbonFootprintConfiguration = void 0;
16
16
  const CarbonFootprintConfiguration_1 = require("../../../shared/domain/entities/CarbonFootprintConfiguration");
@@ -20,7 +20,7 @@ const CorporateCarbonFootprintConfigurationName_1 = require("../value-objects/Co
20
20
  const CorporateCarbonFootprintConfigurationCreatedByStakeholder_1 = require("../value-objects/CorporateCarbonFootprintConfigurationCreatedByStakeholder");
21
21
  const CorporateCarbonFootprintConfigurationExecutionPeriod_1 = require("../value-objects/CorporateCarbonFootprintConfigurationExecutionPeriod");
22
22
  const CorporateCarbonFootprintConfigurationBaseYear_1 = require("../value-objects/CorporateCarbonFootprintConfigurationBaseYear");
23
- const CorporateCarbonFootprintConfigurationFacility_1 = require("../value-objects/CorporateCarbonFootprintConfigurationFacility");
23
+ const CorporateCarbonFootprintConfigurationFacilities_1 = require("../value-objects/CorporateCarbonFootprintConfigurationFacilities");
24
24
  const CorporateCarbonFootprintConfigurationFootprintType_1 = require("../value-objects/CorporateCarbonFootprintConfigurationFootprintType");
25
25
  const CorporateCarbonFootprintConfigurationIntensityIndicatorConfigurations_1 = require("../value-objects/CorporateCarbonFootprintConfigurationIntensityIndicatorConfigurations");
26
26
  const CorporateCarbonFootprintConfigurationOwnedByCarbonClient_1 = require("../value-objects/CorporateCarbonFootprintConfigurationOwnedByCarbonClient");
@@ -72,20 +72,20 @@ class CorporateCarbonFootprintConfiguration extends CarbonFootprintConfiguration
72
72
  ownedByCarbonClient,
73
73
  createdByStakeholder,
74
74
  }, skipDomainValidation);
75
- _CorporateCarbonFootprintConfiguration_facility.set(this, void 0);
75
+ _CorporateCarbonFootprintConfiguration_facilities.set(this, void 0);
76
76
  _CorporateCarbonFootprintConfiguration_executionPeriod.set(this, void 0);
77
77
  _CorporateCarbonFootprintConfiguration_baseYear.set(this, void 0);
78
78
  _CorporateCarbonFootprintConfiguration_segmentConfigurations.set(this, void 0);
79
79
  if (skipDomainValidation === false) {
80
80
  // Initialize with domain validation
81
- __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_facility, CorporateCarbonFootprintConfigurationFacility_1.CorporateCarbonFootprintConfigurationFacility.create(props.facility), "f");
81
+ __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_facilities, CorporateCarbonFootprintConfigurationFacilities_1.CorporateCarbonFootprintConfigurationFacilities.create(props.facilities), "f");
82
82
  __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_executionPeriod, CorporateCarbonFootprintConfigurationExecutionPeriod_1.CorporateCarbonFootprintConfigurationExecutionPeriod.create(props.executionPeriod), "f");
83
83
  __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_baseYear, CorporateCarbonFootprintConfigurationBaseYear_1.CorporateCarbonFootprintConfigurationBaseYear.create(props.baseYear), "f");
84
84
  __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_segmentConfigurations, CorporateCarbonFootprintConfigurationSegmentConfigurations_1.CorporateCarbonFootprintConfigurationSegmentConfigurations.create(props.segmentConfigurations), "f");
85
85
  }
86
86
  else {
87
87
  // Initialize from primitives (no domain validation)
88
- __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_facility, CorporateCarbonFootprintConfigurationFacility_1.CorporateCarbonFootprintConfigurationFacility.fromPrimitives(props.facility), "f");
88
+ __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_facilities, CorporateCarbonFootprintConfigurationFacilities_1.CorporateCarbonFootprintConfigurationFacilities.fromPrimitives(props.facilities), "f");
89
89
  __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_executionPeriod, CorporateCarbonFootprintConfigurationExecutionPeriod_1.CorporateCarbonFootprintConfigurationExecutionPeriod.fromPrimitives(props.executionPeriod), "f");
90
90
  __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_baseYear, CorporateCarbonFootprintConfigurationBaseYear_1.CorporateCarbonFootprintConfigurationBaseYear.fromPrimitives(props.baseYear), "f");
91
91
  __classPrivateFieldSet(this, _CorporateCarbonFootprintConfiguration_segmentConfigurations, CorporateCarbonFootprintConfigurationSegmentConfigurations_1.CorporateCarbonFootprintConfigurationSegmentConfigurations.fromPrimitives(props.segmentConfigurations), "f");
@@ -106,7 +106,7 @@ class CorporateCarbonFootprintConfiguration extends CarbonFootprintConfiguration
106
106
  status: primitives.status,
107
107
  ownedByCarbonClient: primitives.ownedByCarbonClient,
108
108
  createdByStakeholder: primitives.createdByStakeholder,
109
- facility: primitives.facility,
109
+ facilities: primitives.facilities,
110
110
  executionPeriod: primitives.executionPeriod,
111
111
  baseYear: primitives.baseYear,
112
112
  segmentConfigurations: primitives.segmentConfigurations,
@@ -125,14 +125,14 @@ class CorporateCarbonFootprintConfiguration extends CarbonFootprintConfiguration
125
125
  status: this.status.toEnum(),
126
126
  ownedByCarbonClient: this.ownedByCarbonClient.toPrimitives(),
127
127
  createdByStakeholder: this.createdByStakeholder.toPrimitives(),
128
- facility: this.facility.toPrimitives(),
128
+ facilities: this.facilities.toPrimitives(),
129
129
  executionPeriod: this.executionPeriod.toPrimitives(),
130
130
  baseYear: this.baseYear.toPrimitives(),
131
131
  segmentConfigurations: this.segmentConfigurations.toPrimitives(),
132
132
  };
133
133
  }
134
- get facility() {
135
- return __classPrivateFieldGet(this, _CorporateCarbonFootprintConfiguration_facility, "f");
134
+ get facilities() {
135
+ return __classPrivateFieldGet(this, _CorporateCarbonFootprintConfiguration_facilities, "f");
136
136
  }
137
137
  get executionPeriod() {
138
138
  return __classPrivateFieldGet(this, _CorporateCarbonFootprintConfiguration_executionPeriod, "f");
@@ -145,4 +145,4 @@ class CorporateCarbonFootprintConfiguration extends CarbonFootprintConfiguration
145
145
  }
146
146
  }
147
147
  exports.CorporateCarbonFootprintConfiguration = CorporateCarbonFootprintConfiguration;
148
- _CorporateCarbonFootprintConfiguration_facility = new WeakMap(), _CorporateCarbonFootprintConfiguration_executionPeriod = new WeakMap(), _CorporateCarbonFootprintConfiguration_baseYear = new WeakMap(), _CorporateCarbonFootprintConfiguration_segmentConfigurations = new WeakMap();
148
+ _CorporateCarbonFootprintConfiguration_facilities = new WeakMap(), _CorporateCarbonFootprintConfiguration_executionPeriod = new WeakMap(), _CorporateCarbonFootprintConfiguration_baseYear = new WeakMap(), _CorporateCarbonFootprintConfiguration_segmentConfigurations = new WeakMap();
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CorporateCarbonFootprintConfigurationFacilities = void 0;
4
+ const FacilityReferences_1 = require("../../../../shared/domain/value-objects/FacilityReferences");
5
+ class CorporateCarbonFootprintConfigurationFacilities extends FacilityReferences_1.FacilityReferences {
6
+ constructor(value, skipDomainValidation) {
7
+ super(value, skipDomainValidation, CorporateCarbonFootprintConfigurationFacilities.PROPERTY_NAME, { allowEmpty: false });
8
+ }
9
+ static create(value) {
10
+ return new CorporateCarbonFootprintConfigurationFacilities(value, false);
11
+ }
12
+ static fromPrimitives(primitives) {
13
+ const value = primitives.map((primitive) => ({
14
+ id: primitive.id,
15
+ commercialBranchName: primitive.commercialBranchName,
16
+ }));
17
+ return new CorporateCarbonFootprintConfigurationFacilities(value, true);
18
+ }
19
+ toPrimitives() {
20
+ return this.value;
21
+ }
22
+ }
23
+ exports.CorporateCarbonFootprintConfigurationFacilities = CorporateCarbonFootprintConfigurationFacilities;
24
+ CorporateCarbonFootprintConfigurationFacilities.PROPERTY_NAME = 'facilities';
@@ -14,7 +14,7 @@ const InvalidPropertyTypeError_1 = require("../../../../shared/domain/exceptions
14
14
  * Value object wrapping the intrinsic dimensional keys denormalized on the
15
15
  * EmissionCalculation at calculation time (CALC-001). Required string fields
16
16
  * (`emissionScope`, `segmentId`, `periodStart`) are validated non-empty;
17
- * `subScope` and `subsegmentId` are nullable.
17
+ * `subScope`, `subsegmentId` and `facilityId` are nullable.
18
18
  */
19
19
  class EmissionCalculationDimensions extends ValueObject_1.ValueObject {
20
20
  constructor(value, skipDomainValidation) {
@@ -47,6 +47,9 @@ _a = EmissionCalculationDimensions, _EmissionCalculationDimensions_validate = fu
47
47
  if (value.subsegmentId !== null && typeof value.subsegmentId !== 'string') {
48
48
  throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${_a.PROPERTY_NAME}.subsegmentId`, 'string or null', typeof value.subsegmentId);
49
49
  }
50
+ if (value.facilityId !== null && typeof value.facilityId !== 'string') {
51
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${_a.PROPERTY_NAME}.facilityId`, 'string or null', typeof value.facilityId);
52
+ }
50
53
  }, _EmissionCalculationDimensions_toPrimitives = function _EmissionCalculationDimensions_toPrimitives(value) {
51
54
  return {
52
55
  emissionScope: value.emissionScope,
@@ -54,6 +57,7 @@ _a = EmissionCalculationDimensions, _EmissionCalculationDimensions_validate = fu
54
57
  segmentId: value.segmentId,
55
58
  subsegmentId: value.subsegmentId,
56
59
  periodStart: value.periodStart,
60
+ facilityId: value.facilityId,
57
61
  };
58
62
  };
59
63
  EmissionCalculationDimensions.PROPERTY_NAME = 'dimensions';
@@ -119,6 +119,13 @@ class GHGEmissionResult extends AggregateRoot_1.AggregateRoot {
119
119
  get unit() {
120
120
  return __classPrivateFieldGet(this, _GHGEmissionResult_unit, "f");
121
121
  }
122
+ /**
123
+ * Si este resultado se suma al total del inventario. Falso solo para el CO₂ biogénico
124
+ * (`CO2-BIOGENIC`), que se reporta como partida informativa fuera de los alcances.
125
+ */
126
+ countsTowardsInventoryTotal() {
127
+ return __classPrivateFieldGet(this, _GHGEmissionResult_greenhouseGas, "f").countsTowardsInventoryTotal();
128
+ }
122
129
  }
123
130
  exports.GHGEmissionResult = GHGEmissionResult;
124
131
  _GHGEmissionResult_emissionCalculation = new WeakMap(), _GHGEmissionResult_greenhouseGas = new WeakMap(), _GHGEmissionResult_activityValue = new WeakMap(), _GHGEmissionResult_emissionFactor = new WeakMap(), _GHGEmissionResult_globalWarmingPotential = new WeakMap(), _GHGEmissionResult_rawEmission = new WeakMap(), _GHGEmissionResult_co2Equivalent = new WeakMap(), _GHGEmissionResult_unit = new WeakMap();
@@ -45,6 +45,18 @@ class GHGEmissionResultGreenhouseGas extends ValueObject_1.ValueObject {
45
45
  isFluorinatedGas() {
46
46
  return GHGEmissionResultGreenhouseGas.FLUORINATED_CATEGORIES.includes(this.category);
47
47
  }
48
+ /** CO₂ de biomasa / biocombustibles (`CO2-BIOGENIC`): partida informativa fuera del total. */
49
+ isBiogenicCarbonDioxide() {
50
+ return GreenhouseGasSpecies_1.GreenhouseGasSpecies.isBiogenicCarbonDioxide(this.species);
51
+ }
52
+ /**
53
+ * Si el resultado de este gas se suma al total del inventario y a sus alcances. Solo el CO₂
54
+ * biogénico queda fuera (GHG Protocol cap. 9 / ISO 14064-1 §9.3.1); el CH₄ y el N₂O de la
55
+ * misma combustión cuentan con su PCG.
56
+ */
57
+ countsTowardsInventoryTotal() {
58
+ return !this.isBiogenicCarbonDioxide();
59
+ }
48
60
  toPrimitives() {
49
61
  return {
50
62
  greenhouseGasCategory: this.value.greenhouseGasCategory,
@@ -43,9 +43,10 @@ var DataBindingSource;
43
43
  DataBindingSource["AGGREGATION_GAS_N2O"] = "aggregation.gas.n2o";
44
44
  // Aggregations - By Segment
45
45
  DataBindingSource["AGGREGATION_BY_SEGMENT"] = "aggregation.bySegment";
46
- // Aggregations - Biogenic
47
- DataBindingSource["AGGREGATION_BIOGENIC"] = "aggregation.biogenic";
46
+ // Aggregations - Biogenic CO₂ (informational item OUTSIDE the inventory total and the scopes,
47
+ // GHG Protocol cap. 9 / ISO 14064-1 §9.3.1): the `CO2-BIOGENIC` species, total and per source.
48
48
  DataBindingSource["AGGREGATION_BIOGENIC_CO2"] = "aggregation.biogenicCO2";
49
+ DataBindingSource["AGGREGATION_BIOGENIC_CO2_BY_SOURCE"] = "aggregation.biogenicCO2.bySource";
49
50
  // Aggregations - Uncertainty (GAP 4): inventory-level propagated uncertainty
50
51
  DataBindingSource["AGGREGATION_UNCERTAINTY_PERCENTAGE"] = "aggregation.uncertainty.percentage";
51
52
  DataBindingSource["AGGREGATION_UNCERTAINTY_LEVEL"] = "aggregation.uncertainty.level";
@@ -17,7 +17,7 @@ exports.ErrorCode = void 0;
17
17
  * - RPT: Reporting
18
18
  * - SHR: Shared/Common
19
19
  *
20
- * Total Codes: 173
20
+ * Total Codes: 174
21
21
  * Total Exceptions Migrated: 171 (100%)
22
22
  *
23
23
  * @since 1.0.0
@@ -118,6 +118,8 @@ var ErrorCode;
118
118
  ErrorCode["TRIGGER_VALUE_CONVERSION_ERROR"] = "CBX-ADC-020";
119
119
  ErrorCode["TRIGGER_VALUE_STRING_OPERATION_ERROR"] = "CBX-ADC-021";
120
120
  ErrorCode["UNKNOWN_CONDITIONAL_ACTION_CATEGORY"] = "CBX-ADC-022";
121
+ // Activity Data Submission facility attribution (CBX-ADC-023)
122
+ ErrorCode["INVALID_SUBMISSION_FACILITY"] = "CBX-ADC-023";
121
123
  // Emission Calculation Errors (CBX-EMC-XXX)
122
124
  ErrorCode["CALCULATION_FAILED"] = "CBX-EMC-001";
123
125
  ErrorCode["MISSING_EMISSION_FACTOR"] = "CBX-EMC-002";
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,224 @@
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 _FacilityReferences_facilityReferences, _FacilityReferences_options;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.FacilityReferences = void 0;
16
+ const InvalidPropertyTypeError_1 = require("../exceptions/InvalidPropertyTypeError");
17
+ const InvalidPropertyValueError_1 = require("../exceptions/InvalidPropertyValueError");
18
+ const ValueObject_1 = require("./ValueObject");
19
+ const String_1 = require("./String");
20
+ const AggregateId_1 = require("./AggregateId");
21
+ class FacilityReferences extends ValueObject_1.ValueObject {
22
+ /**
23
+ * Constructor protegido para que solo clases hijas puedan instanciar.
24
+ * Aplica todas las validaciones de dominio al momento de construcción.
25
+ */
26
+ constructor(value, skipDomainValidation, propertyName = FacilityReferences.DEFAULT_PROPERTY_NAME, options = FacilityReferences.DEFAULT_OPTIONS) {
27
+ const finalOptions = { ...FacilityReferences.DEFAULT_OPTIONS, ...options };
28
+ if (skipDomainValidation === false) {
29
+ FacilityReferences.validateReferences(value, propertyName, finalOptions);
30
+ }
31
+ super(FacilityReferences.toCleanReferences(value), skipDomainValidation, propertyName, 'The provided value must be an array of FacilityReference from the domain layer', { allowNull: false, allowUndefined: false });
32
+ _FacilityReferences_facilityReferences.set(this, void 0);
33
+ _FacilityReferences_options.set(this, void 0);
34
+ __classPrivateFieldSet(this, _FacilityReferences_facilityReferences, FacilityReferences.toCleanReferences(value), "f");
35
+ __classPrivateFieldSet(this, _FacilityReferences_options, finalOptions, "f");
36
+ }
37
+ /**
38
+ * Validación estática para reutilización en factory methods y constructores.
39
+ */
40
+ static validateReferences(value, propertyName, options) {
41
+ this.guardAgainstInvalidType(value, propertyName);
42
+ this.guardAgainstInvalidEmptyArray(value, options, propertyName);
43
+ value.forEach((reference, index) => {
44
+ this.guardAgainstInvalidReference(reference, index, propertyName);
45
+ });
46
+ this.guardAgainstDuplicatedIds(value, propertyName);
47
+ }
48
+ /**
49
+ * Valida que el valor sea un array válido.
50
+ */
51
+ static guardAgainstInvalidType(value, propertyName) {
52
+ if (!Array.isArray(value)) {
53
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(propertyName, 'array of FacilityReference', typeof value);
54
+ }
55
+ }
56
+ /**
57
+ * Valida que el array no esté vacío si no se permite.
58
+ */
59
+ static guardAgainstInvalidEmptyArray(value, options, propertyName) {
60
+ if (!options.allowEmpty && value.length === 0) {
61
+ throw InvalidPropertyValueError_1.InvalidPropertyValueError.create(propertyName, 'non-empty array', 'empty array');
62
+ }
63
+ }
64
+ /**
65
+ * Valida que no haya sedes duplicadas en la lista.
66
+ */
67
+ static guardAgainstDuplicatedIds(value, propertyName) {
68
+ const ids = value.map((item) => item.id.trim());
69
+ const uniqueIds = new Set(ids);
70
+ if (ids.length !== uniqueIds.size) {
71
+ throw InvalidPropertyValueError_1.InvalidPropertyValueError.create(`${propertyName}.ids`, 'array with unique IDs', 'array with duplicated IDs');
72
+ }
73
+ }
74
+ /**
75
+ * Valida una referencia individual.
76
+ */
77
+ static guardAgainstInvalidReference(reference, index, basePropertyName) {
78
+ const propertyName = `${basePropertyName}[${index}]`;
79
+ if (!reference || typeof reference !== 'object') {
80
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(propertyName, 'FacilityReference object', typeof reference);
81
+ }
82
+ if (typeof reference.id !== 'string') {
83
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.id`, 'string', typeof reference.id);
84
+ }
85
+ if (typeof reference.commercialBranchName !== 'string') {
86
+ throw InvalidPropertyTypeError_1.InvalidPropertyTypeError.create(`${propertyName}.commercialBranchName`, 'string', typeof reference.commercialBranchName);
87
+ }
88
+ String_1.String.guardAgainstEmptyValue(reference.id, `${propertyName}.id`);
89
+ AggregateId_1.AggregateId.guardAgainstInvalidId(reference.id, `${propertyName}.id`);
90
+ String_1.String.guardAgainstEmptyValue(reference.commercialBranchName, `${propertyName}.commercialBranchName`);
91
+ }
92
+ /**
93
+ * Limpia y normaliza las referencias.
94
+ */
95
+ static toCleanReferences(value) {
96
+ return value.map((item) => ({
97
+ id: item.id.trim(),
98
+ commercialBranchName: item.commercialBranchName.trim(),
99
+ }));
100
+ }
101
+ /**
102
+ * Array de referencias de sedes (inmutable).
103
+ */
104
+ get facilityReferences() {
105
+ return Object.freeze([...__classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f")]);
106
+ }
107
+ /**
108
+ * Opciones de configuración de la colección.
109
+ */
110
+ get options() {
111
+ return Object.freeze({ ...__classPrivateFieldGet(this, _FacilityReferences_options, "f") });
112
+ }
113
+ /**
114
+ * Número de referencias en la lista.
115
+ */
116
+ get count() {
117
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").length;
118
+ }
119
+ /**
120
+ * Verifica si la lista está vacía.
121
+ */
122
+ isEmpty() {
123
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").length === 0;
124
+ }
125
+ /**
126
+ * Verifica si la lista tiene referencias.
127
+ */
128
+ hasReferences() {
129
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").length > 0;
130
+ }
131
+ /**
132
+ * Verifica si la colección permite estar vacía.
133
+ */
134
+ allowsEmpty() {
135
+ return __classPrivateFieldGet(this, _FacilityReferences_options, "f").allowEmpty === true;
136
+ }
137
+ /**
138
+ * Verifica si la colección está en un estado válido según sus opciones.
139
+ */
140
+ isValidState() {
141
+ if (!this.allowsEmpty() && this.isEmpty()) {
142
+ return false;
143
+ }
144
+ return true;
145
+ }
146
+ /**
147
+ * Obtiene una referencia por su id.
148
+ */
149
+ getById(id) {
150
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").find((reference) => reference.id === id.trim());
151
+ }
152
+ /**
153
+ * Verifica si existe una referencia con el id especificado.
154
+ */
155
+ hasId(id) {
156
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").some((reference) => reference.id === id.trim());
157
+ }
158
+ /**
159
+ * Obtiene todos los ids de las referencias.
160
+ */
161
+ getIds() {
162
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").map((reference) => reference.id);
163
+ }
164
+ /**
165
+ * Obtiene todos los nombres comerciales de las referencias.
166
+ */
167
+ getCommercialBranchNames() {
168
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").map((reference) => reference.commercialBranchName);
169
+ }
170
+ /**
171
+ * Compara la igualdad semántica con otra lista de referencias.
172
+ * Dos colecciones son iguales si referencian el mismo conjunto de sedes.
173
+ */
174
+ equals(other) {
175
+ if (!(other instanceof FacilityReferences)) {
176
+ return false;
177
+ }
178
+ if (__classPrivateFieldGet(this, _FacilityReferences_options, "f").allowEmpty !== __classPrivateFieldGet(other, _FacilityReferences_options, "f").allowEmpty) {
179
+ return false;
180
+ }
181
+ if (__classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").length !== __classPrivateFieldGet(other, _FacilityReferences_facilityReferences, "f").length) {
182
+ return false;
183
+ }
184
+ const otherIds = new Set(other.getIds());
185
+ return this.getIds().every((id) => otherIds.has(id));
186
+ }
187
+ /**
188
+ * Genera un hash code para usar en colecciones.
189
+ */
190
+ hashCode() {
191
+ const optionsHash = __classPrivateFieldGet(this, _FacilityReferences_options, "f").allowEmpty ? 'E' : 'NE';
192
+ return `facilityReferences_${optionsHash}_${[...this.getIds()].sort().join('_')}`;
193
+ }
194
+ /**
195
+ * Convierte a representación primitiva para persistencia.
196
+ */
197
+ toPrimitives() {
198
+ return __classPrivateFieldGet(this, _FacilityReferences_facilityReferences, "f").map((reference) => ({
199
+ id: reference.id,
200
+ commercialBranchName: reference.commercialBranchName,
201
+ }));
202
+ }
203
+ /**
204
+ * Representación como string (lista de nombres comerciales).
205
+ */
206
+ toString() {
207
+ if (this.isEmpty()) {
208
+ return 'Sin sedes';
209
+ }
210
+ return this.getCommercialBranchNames().join(', ');
211
+ }
212
+ /**
213
+ * Representación JSON para serialización.
214
+ */
215
+ toJSON() {
216
+ return this.toPrimitives();
217
+ }
218
+ }
219
+ exports.FacilityReferences = FacilityReferences;
220
+ _FacilityReferences_facilityReferences = new WeakMap(), _FacilityReferences_options = new WeakMap();
221
+ FacilityReferences.DEFAULT_PROPERTY_NAME = 'facilityReferences';
222
+ FacilityReferences.DEFAULT_OPTIONS = {
223
+ allowEmpty: false, // Por defecto no permite estar vacío
224
+ };
@@ -10,6 +10,12 @@ const InvalidPropertyValueError_1 = require("../exceptions/InvalidPropertyValueE
10
10
  * para que un mismo refrigerante escrito con espacios/casing distintos matchee siempre igual.
11
11
  * La categoría (GreenhouseGasCategory) viaja al lado; aquí no se valida coherencia química
12
12
  * especie↔categoría (decisión de diseño: validación permisiva, match por especie).
13
+ *
14
+ * CO₂ biogénico: el CO₂ liberado al quemar biomasa o biocombustibles se reporta por separado,
15
+ * fuera de los alcances y del total del inventario (GHG Protocol Corporate Standard cap. 9;
16
+ * ISO 14064-1:2018 §9.3.1). Se modela como la especie `CO2-BIOGENIC` de la categoría CO2
17
+ * (paralela a `CH4-BIOGENIC`, que SÍ cuenta en el total con su PCG). Este VO es el único lugar
18
+ * que conoce esa convención: toda suma de inventario pregunta `isBiogenicCarbonDioxide`.
13
19
  */
14
20
  class GreenhouseGasSpecies extends String_1.String {
15
21
  constructor(value, skipDomainValidation) {
@@ -33,6 +39,16 @@ class GreenhouseGasSpecies extends String_1.String {
33
39
  String_1.String.guardAgainstInvalidType(value, GreenhouseGasSpecies.PROPERTY_NAME);
34
40
  return value.trim().replace(/\s+/g, ' ').toUpperCase();
35
41
  }
42
+ /**
43
+ * True para la especie `CO2-BIOGENIC` (en cualquier casing/espaciado): CO₂ que NO cuenta en
44
+ * el total del inventario y se reporta como partida informativa.
45
+ */
46
+ static isBiogenicCarbonDioxide(value) {
47
+ return GreenhouseGasSpecies.normalize(value) === GreenhouseGasSpecies.BIOGENIC_CARBON_DIOXIDE;
48
+ }
49
+ isBiogenicCarbonDioxide() {
50
+ return GreenhouseGasSpecies.isBiogenicCarbonDioxide(this.value);
51
+ }
36
52
  static guardAgainstInvalidSpecies(value) {
37
53
  String_1.String.guardAgainstEmptyValue(value, GreenhouseGasSpecies.PROPERTY_NAME);
38
54
  if (!GreenhouseGasSpecies.SPECIES_REGEX.test(value)) {
@@ -45,6 +61,7 @@ class GreenhouseGasSpecies extends String_1.String {
45
61
  }
46
62
  exports.GreenhouseGasSpecies = GreenhouseGasSpecies;
47
63
  GreenhouseGasSpecies.PROPERTY_NAME = 'greenhouseGasSpecies';
64
+ GreenhouseGasSpecies.BIOGENIC_CARBON_DIOXIDE = 'CO2-BIOGENIC';
48
65
  // Letras, dígitos, espacio, guion y barra: cubre ASHRAE (R-410A) y químicos/mezclas
49
66
  // (HFC-134A, MEZCLA HFC 365MFC/HFC 227EA, POLYCOLD 1102HC).
50
67
  GreenhouseGasSpecies.SPECIES_REGEX = /^[A-Z0-9][A-Z0-9 /-]*$/;