@tiangong-lca/tidas-sdk 0.1.30 → 0.1.32

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 (161) hide show
  1. package/README.md +70 -20
  2. package/dist/core/copilot/base.d.ts +0 -1
  3. package/dist/core/copilot/base.d.ts.map +1 -1
  4. package/dist/core/entities/TidasFlow.d.ts.map +1 -1
  5. package/dist/core/entities/TidasFlow.js +17 -8
  6. package/dist/core/entities/TidasFlow.js.map +1 -1
  7. package/dist/core/entities/TidasLifeCycleModel.js +1 -1
  8. package/dist/core/entities/TidasLifeCycleModel.js.map +1 -1
  9. package/dist/core/entities/TidasUnitGroup.d.ts.map +1 -1
  10. package/dist/core/entities/TidasUnitGroup.js.map +1 -1
  11. package/dist/data/bundled-methodologies.json +0 -1
  12. package/dist/index.d.ts +3 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +3 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/parity/constants.d.ts +4 -0
  17. package/dist/parity/constants.d.ts.map +1 -0
  18. package/dist/parity/constants.js +15 -0
  19. package/dist/parity/constants.js.map +1 -0
  20. package/dist/parity/index.d.ts +5 -0
  21. package/dist/parity/index.d.ts.map +1 -0
  22. package/dist/parity/index.js +21 -0
  23. package/dist/parity/index.js.map +1 -0
  24. package/dist/parity/report.d.ts +36 -0
  25. package/dist/parity/report.d.ts.map +1 -0
  26. package/dist/parity/report.js +39 -0
  27. package/dist/parity/report.js.map +1 -0
  28. package/dist/parity/validate.d.ts +5 -0
  29. package/dist/parity/validate.d.ts.map +1 -0
  30. package/dist/parity/validate.js +231 -0
  31. package/dist/parity/validate.js.map +1 -0
  32. package/dist/parity/validation-rules.d.ts +15 -0
  33. package/dist/parity/validation-rules.d.ts.map +1 -0
  34. package/dist/parity/validation-rules.js +295 -0
  35. package/dist/parity/validation-rules.js.map +1 -0
  36. package/dist/runtime-assets/eilcd/schemas/ILCD_Categories.xsd +46 -0
  37. package/dist/runtime-assets/eilcd/schemas/ILCD_Common_DataTypes.xsd +205 -0
  38. package/dist/runtime-assets/eilcd/schemas/ILCD_Common_EnumerationValues.xsd +2021 -0
  39. package/dist/runtime-assets/eilcd/schemas/ILCD_Common_Groups.xsd +1091 -0
  40. package/dist/runtime-assets/eilcd/schemas/ILCD_Common_Validation.xsd +148 -0
  41. package/dist/runtime-assets/eilcd/schemas/ILCD_ContactDataSet.xsd +361 -0
  42. package/dist/runtime-assets/eilcd/schemas/ILCD_Documentation.xsd +72 -0
  43. package/dist/runtime-assets/eilcd/schemas/ILCD_FlowDataSet.xsd +705 -0
  44. package/dist/runtime-assets/eilcd/schemas/ILCD_FlowPropertyDataSet.xsd +353 -0
  45. package/dist/runtime-assets/eilcd/schemas/ILCD_ILCD.xsd +56 -0
  46. package/dist/runtime-assets/eilcd/schemas/ILCD_LCIAMethodDataSet.xsd +1513 -0
  47. package/dist/runtime-assets/eilcd/schemas/ILCD_LCIAMethodologies.xsd +27 -0
  48. package/dist/runtime-assets/eilcd/schemas/ILCD_LifeCycleModelDataSet.xsd +855 -0
  49. package/dist/runtime-assets/eilcd/schemas/ILCD_Locations.xsd +28 -0
  50. package/dist/runtime-assets/eilcd/schemas/ILCD_ProcessDataSet.xsd +2885 -0
  51. package/dist/runtime-assets/eilcd/schemas/ILCD_SourceDataSet.xsd +301 -0
  52. package/dist/runtime-assets/eilcd/schemas/ILCD_UnitGroupDataSet.xsd +397 -0
  53. package/dist/runtime-assets/eilcd/schemas/xml.xsd +287 -0
  54. package/dist/runtime-assets/eilcd/stylesheets/ILCDClassification_Reference.xml +283 -0
  55. package/dist/runtime-assets/eilcd/stylesheets/ILCDFlowCategorization_Reference.xml +72 -0
  56. package/dist/runtime-assets/eilcd/stylesheets/ILCDLCIAMethodologies_Reference.xml +20 -0
  57. package/dist/runtime-assets/eilcd/stylesheets/ILCDLocations_Reference.xml +273 -0
  58. package/dist/runtime-assets/eilcd/stylesheets/common.xsl +582 -0
  59. package/dist/runtime-assets/eilcd/stylesheets/compliance_1.1.xsl +1063 -0
  60. package/dist/runtime-assets/eilcd/stylesheets/contact2html.xsl +36 -0
  61. package/dist/runtime-assets/eilcd/stylesheets/dataset-common.xsl +13 -0
  62. package/dist/runtime-assets/eilcd/stylesheets/display-common.xsl +2019 -0
  63. package/dist/runtime-assets/eilcd/stylesheets/flow2html.xsl +255 -0
  64. package/dist/runtime-assets/eilcd/stylesheets/flowproperty2html.xsl +50 -0
  65. package/dist/runtime-assets/eilcd/stylesheets/ilcd2xls.xsl +735 -0
  66. package/dist/runtime-assets/eilcd/stylesheets/lciamethod2html.xsl +355 -0
  67. package/dist/runtime-assets/eilcd/stylesheets/process2html.xsl +948 -0
  68. package/dist/runtime-assets/eilcd/stylesheets/reference_types.xml +133 -0
  69. package/dist/runtime-assets/eilcd/stylesheets/source2html.xsl +29 -0
  70. package/dist/runtime-assets/eilcd/stylesheets/unitTests.xsl +78 -0
  71. package/dist/runtime-assets/eilcd/stylesheets/unitgroup2html.xsl +55 -0
  72. package/dist/runtime-assets/eilcd/stylesheets/validate.xsl +435 -0
  73. package/dist/runtime-assets/tidas/methodologies/tidas_flows.yaml +550 -0
  74. package/dist/runtime-assets/tidas/methodologies/tidas_processes.yaml +498 -0
  75. package/dist/runtime-assets/tidas/schemas/tidas_contacts.json +312 -0
  76. package/dist/runtime-assets/tidas/schemas/tidas_contacts_category.json +126 -0
  77. package/dist/runtime-assets/tidas/schemas/tidas_data_types.json +280 -0
  78. package/dist/runtime-assets/tidas/schemas/tidas_flowproperties.json +303 -0
  79. package/dist/runtime-assets/tidas/schemas/tidas_flowproperties_category.json +61 -0
  80. package/dist/runtime-assets/tidas/schemas/tidas_flows.json +809 -0
  81. package/dist/runtime-assets/tidas/schemas/tidas_flows_elementary_category.json +720 -0
  82. package/dist/runtime-assets/tidas/schemas/tidas_flows_product_category.json +59623 -0
  83. package/dist/runtime-assets/tidas/schemas/tidas_lciamethods.json +1326 -0
  84. package/dist/runtime-assets/tidas/schemas/tidas_lciamethods_category.json +685 -0
  85. package/dist/runtime-assets/tidas/schemas/tidas_lifecyclemodels.json +1375 -0
  86. package/dist/runtime-assets/tidas/schemas/tidas_locations_category.json +2593 -0
  87. package/dist/runtime-assets/tidas/schemas/tidas_processes.json +1638 -0
  88. package/dist/runtime-assets/tidas/schemas/tidas_processes_category.json +10795 -0
  89. package/dist/runtime-assets/tidas/schemas/tidas_sources.json +228 -0
  90. package/dist/runtime-assets/tidas/schemas/tidas_sources_category.json +100 -0
  91. package/dist/runtime-assets/tidas/schemas/tidas_unitgroups.json +338 -0
  92. package/dist/runtime-assets/tidas/schemas/tidas_unitgroups_category.json +61 -0
  93. package/dist/schemas/tidas_contacts.schema.d.ts +58 -58
  94. package/dist/schemas/tidas_contacts.schema.js +2 -2
  95. package/dist/schemas/tidas_contacts.schema.js.map +1 -1
  96. package/dist/schemas/tidas_data_types.schema.d.ts +54 -21
  97. package/dist/schemas/tidas_data_types.schema.d.ts.map +1 -1
  98. package/dist/schemas/tidas_data_types.schema.js +58 -25
  99. package/dist/schemas/tidas_data_types.schema.js.map +1 -1
  100. package/dist/schemas/tidas_flowproperties.schema.d.ts +67 -67
  101. package/dist/schemas/tidas_flowproperties.schema.js +1 -1
  102. package/dist/schemas/tidas_flowproperties.schema.js.map +1 -1
  103. package/dist/schemas/tidas_flows.schema.d.ts +105 -105
  104. package/dist/schemas/tidas_flows.schema.d.ts.map +1 -1
  105. package/dist/schemas/tidas_flows.schema.js +3 -3
  106. package/dist/schemas/tidas_flows.schema.js.map +1 -1
  107. package/dist/schemas/tidas_lciamethods.schema.d.ts +293 -293
  108. package/dist/schemas/tidas_lciamethods.schema.d.ts.map +1 -1
  109. package/dist/schemas/tidas_lciamethods.schema.js +1 -1
  110. package/dist/schemas/tidas_lciamethods.schema.js.map +1 -1
  111. package/dist/schemas/tidas_lifecyclemodels.schema.d.ts +194 -194
  112. package/dist/schemas/tidas_lifecyclemodels.schema.d.ts.map +1 -1
  113. package/dist/schemas/tidas_lifecyclemodels.schema.js +4 -4
  114. package/dist/schemas/tidas_lifecyclemodels.schema.js.map +1 -1
  115. package/dist/schemas/tidas_processes.schema.d.ts +361 -361
  116. package/dist/schemas/tidas_processes.schema.d.ts.map +1 -1
  117. package/dist/schemas/tidas_processes.schema.js +3 -3
  118. package/dist/schemas/tidas_processes.schema.js.map +1 -1
  119. package/dist/schemas/tidas_sources.schema.d.ts +48 -48
  120. package/dist/schemas/tidas_sources.schema.js +1 -1
  121. package/dist/schemas/tidas_sources.schema.js.map +1 -1
  122. package/dist/schemas/tidas_unitgroups.schema.d.ts +56 -56
  123. package/dist/schemas/tidas_unitgroups.schema.d.ts.map +1 -1
  124. package/dist/schemas/tidas_unitgroups.schema.js +1 -1
  125. package/dist/schemas/tidas_unitgroups.schema.js.map +1 -1
  126. package/dist/tools/convert-directory.d.ts +21 -0
  127. package/dist/tools/convert-directory.d.ts.map +1 -0
  128. package/dist/tools/convert-directory.js +99 -0
  129. package/dist/tools/convert-directory.js.map +1 -0
  130. package/dist/tools/index.d.ts +4 -0
  131. package/dist/tools/index.d.ts.map +1 -0
  132. package/dist/tools/index.js +20 -0
  133. package/dist/tools/index.js.map +1 -0
  134. package/dist/tools/methodology-schema-parity.d.ts +34 -0
  135. package/dist/tools/methodology-schema-parity.d.ts.map +1 -0
  136. package/dist/tools/methodology-schema-parity.js +193 -0
  137. package/dist/tools/methodology-schema-parity.js.map +1 -0
  138. package/dist/tools/runtime-assets.d.ts +7 -0
  139. package/dist/tools/runtime-assets.d.ts.map +1 -0
  140. package/dist/tools/runtime-assets.js +46 -0
  141. package/dist/tools/runtime-assets.js.map +1 -0
  142. package/dist/types/tidas_data_types.d.ts +31 -5
  143. package/dist/types/tidas_data_types.d.ts.map +1 -1
  144. package/dist/types/tidas_flows_product_category.d.ts +48 -48
  145. package/dist/types/tidas_flows_product_category.d.ts.map +1 -1
  146. package/dist/types/tidas_lifecyclemodels.d.ts +1 -1
  147. package/dist/types/tidas_lifecyclemodels.d.ts.map +1 -1
  148. package/dist/types/tidas_processes_category.d.ts +1 -1
  149. package/dist/types/tidas_processes_category.d.ts.map +1 -1
  150. package/dist/utils/diff.d.ts +1 -1
  151. package/dist/utils/diff.d.ts.map +1 -1
  152. package/dist/utils/diff.js +1 -1
  153. package/dist/utils/diff.js.map +1 -1
  154. package/dist/utils/uuid.d.ts.map +1 -1
  155. package/dist/utils/uuid.js +31 -2
  156. package/dist/utils/uuid.js.map +1 -1
  157. package/dist/xml/index.d.ts +10 -0
  158. package/dist/xml/index.d.ts.map +1 -0
  159. package/dist/xml/index.js +53 -0
  160. package/dist/xml/index.js.map +1 -0
  161. package/package.json +36 -8
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.categoryValidate = categoryValidate;
7
+ exports.validatePackageDir = validatePackageDir;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_url_1 = require("node:url");
11
+ const jsonschema_1 = require("jsonschema");
12
+ const runtime_assets_1 = require("../tools/runtime-assets");
13
+ const constants_1 = require("./constants");
14
+ const validation_rules_1 = require("./validation-rules");
15
+ const report_1 = require("./report");
16
+ const SCHEMA_VALIDATION_OPTIONS = {
17
+ nestedErrors: false,
18
+ };
19
+ const schemaRegistryCache = new Map();
20
+ function isSupportedCategory(value) {
21
+ return constants_1.SUPPORTED_CATEGORIES.includes(value);
22
+ }
23
+ function resolveSchemasDir(baseDir = __dirname) {
24
+ return node_path_1.default.join((0, runtime_assets_1.resolveRuntimeAssetDir)('tidas', baseDir), 'schemas');
25
+ }
26
+ function parseSchemaFile(schemaPath) {
27
+ return JSON.parse((0, node_fs_1.readFileSync)(schemaPath, 'utf8'));
28
+ }
29
+ function registerSchemaAliases(validator, schema, schemaPath) {
30
+ const fileName = node_path_1.default.basename(schemaPath);
31
+ const aliases = new Set([
32
+ fileName,
33
+ `./${fileName}`,
34
+ `/${fileName}`,
35
+ (0, node_url_1.pathToFileURL)(schemaPath).href,
36
+ ]);
37
+ for (const id of [schema.$id, schema.id]) {
38
+ if (typeof id === 'string' && id.length > 0) {
39
+ aliases.add(id);
40
+ }
41
+ }
42
+ aliases.forEach((alias) => {
43
+ validator.addSchema(schema, alias);
44
+ });
45
+ }
46
+ function loadSchemaRegistry(baseDir = __dirname) {
47
+ const schemasDir = resolveSchemasDir(baseDir);
48
+ const cachedRegistry = schemaRegistryCache.get(schemasDir);
49
+ if (cachedRegistry) {
50
+ return cachedRegistry;
51
+ }
52
+ const validator = new jsonschema_1.Validator();
53
+ const rootSchemas = new Map();
54
+ for (const fileName of (0, node_fs_1.readdirSync)(schemasDir).sort()) {
55
+ if (!fileName.endsWith('.json')) {
56
+ continue;
57
+ }
58
+ const schemaPath = node_path_1.default.join(schemasDir, fileName);
59
+ const schema = parseSchemaFile(schemaPath);
60
+ registerSchemaAliases(validator, schema, schemaPath);
61
+ const schemaName = fileName.replace(/^tidas_/, '').replace(/\.json$/, '');
62
+ if (isSupportedCategory(schemaName)) {
63
+ rootSchemas.set(schemaName, schema);
64
+ }
65
+ }
66
+ const registry = {
67
+ validator,
68
+ rootSchemas,
69
+ };
70
+ schemaRegistryCache.set(schemasDir, registry);
71
+ return registry;
72
+ }
73
+ function getCategorySchema(category, baseDir = __dirname) {
74
+ const registry = loadSchemaRegistry(baseDir);
75
+ const schema = registry.rootSchemas.get(category);
76
+ if (!schema) {
77
+ throw new Error(`Runtime schema not found for category '${category}'`);
78
+ }
79
+ return {
80
+ schema,
81
+ validator: registry.validator,
82
+ };
83
+ }
84
+ function toLocation(pathParts) {
85
+ return pathParts.length === 0 ? '<root>' : pathParts.join('/');
86
+ }
87
+ function normalizeSchemaMessage(error) {
88
+ if (error.name === 'required' && typeof error.argument === 'string') {
89
+ return `'${error.argument}' is a required property`;
90
+ }
91
+ return error.message;
92
+ }
93
+ function createSchemaIssue(category, filePath, error) {
94
+ const location = toLocation(error.path ?? []);
95
+ const context = {
96
+ validator: error.name,
97
+ };
98
+ const normalizedArgument = normalizeErrorArgument(error.argument);
99
+ if (normalizedArgument !== undefined) {
100
+ context.argument = normalizedArgument;
101
+ }
102
+ return {
103
+ issue_code: 'schema_error',
104
+ severity: 'error',
105
+ category,
106
+ file_path: filePath,
107
+ location,
108
+ message: `Schema Error at ${location}: ${normalizeSchemaMessage(error)}`,
109
+ context,
110
+ };
111
+ }
112
+ function isJsonPrimitive(value) {
113
+ return (value === null ||
114
+ typeof value === 'string' ||
115
+ typeof value === 'number' ||
116
+ typeof value === 'boolean');
117
+ }
118
+ function normalizeErrorArgument(argument) {
119
+ if (argument === undefined) {
120
+ return undefined;
121
+ }
122
+ if (isJsonPrimitive(argument)) {
123
+ return argument;
124
+ }
125
+ if (Array.isArray(argument)) {
126
+ return argument.every((item) => isJsonPrimitive(item)) ? argument : undefined;
127
+ }
128
+ if (argument &&
129
+ typeof argument === 'object' &&
130
+ 'id' in argument &&
131
+ 'length' in argument) {
132
+ const errorDetail = argument;
133
+ return {
134
+ id: errorDetail.id,
135
+ length: errorDetail.length,
136
+ };
137
+ }
138
+ return undefined;
139
+ }
140
+ function createValidationErrorIssue(category, filePath, error) {
141
+ return {
142
+ issue_code: 'validation_error',
143
+ severity: 'error',
144
+ category,
145
+ file_path: filePath,
146
+ location: '<root>',
147
+ message: `Validation error: ${error instanceof Error ? error.message : String(error)}`,
148
+ context: {},
149
+ };
150
+ }
151
+ function createInvalidJsonIssue(category, filePath, error) {
152
+ return {
153
+ issue_code: 'invalid_json',
154
+ severity: 'error',
155
+ category,
156
+ file_path: filePath,
157
+ location: '<root>',
158
+ message: `Invalid JSON: ${error instanceof Error ? error.name : 'Error'}: ${error instanceof Error ? error.message : String(error)}`,
159
+ context: {},
160
+ };
161
+ }
162
+ function dedupeIssues(issues) {
163
+ const seen = new Set();
164
+ const deduped = [];
165
+ for (const issue of issues) {
166
+ const key = `${issue.issue_code}|${issue.file_path}|${issue.location}|${issue.message}`;
167
+ if (seen.has(key)) {
168
+ continue;
169
+ }
170
+ seen.add(key);
171
+ deduped.push(issue);
172
+ }
173
+ return deduped;
174
+ }
175
+ function collectSchemaIssues(validator, schema, jsonItem, category, filePath) {
176
+ try {
177
+ return validator
178
+ .validate(jsonItem, schema, SCHEMA_VALIDATION_OPTIONS)
179
+ .errors.map((error) => createSchemaIssue(category, filePath, error));
180
+ }
181
+ catch (error) {
182
+ return [createValidationErrorIssue(category, filePath, error)];
183
+ }
184
+ }
185
+ function categoryValidate(jsonFilePath, category, emitLogs = true) {
186
+ const issues = [];
187
+ const { schema, validator } = getCategorySchema(category);
188
+ for (const fileName of (0, node_fs_1.readdirSync)(jsonFilePath).sort()) {
189
+ if (!fileName.endsWith('.json')) {
190
+ continue;
191
+ }
192
+ const fullPath = node_path_1.default.join(jsonFilePath, fileName);
193
+ let jsonItem;
194
+ try {
195
+ jsonItem = JSON.parse((0, node_fs_1.readFileSync)(fullPath, 'utf8'));
196
+ }
197
+ catch (error) {
198
+ issues.push(createInvalidJsonIssue(category, fullPath, error));
199
+ continue;
200
+ }
201
+ const itemIssues = dedupeIssues([
202
+ ...collectSchemaIssues(validator, schema, jsonItem, category, fullPath),
203
+ ...(0, validation_rules_1.collectLocalizedTextIssues)(jsonItem, category, fullPath),
204
+ ...(0, validation_rules_1.collectClassificationIssues)(jsonItem, category, fullPath),
205
+ ]);
206
+ issues.push(...itemIssues);
207
+ if (!emitLogs) {
208
+ continue;
209
+ }
210
+ if (itemIssues.length === 0) {
211
+ console.info(`INFO: ${fullPath} PASSED.`);
212
+ continue;
213
+ }
214
+ itemIssues.forEach((issue) => {
215
+ console.error(`ERROR: ${fullPath} ${issue.message}`);
216
+ });
217
+ }
218
+ return (0, report_1.buildCategoryReport)(category, issues);
219
+ }
220
+ function validatePackageDir(inputDir, emitLogs = false) {
221
+ const { rootSchemas } = loadSchemaRegistry();
222
+ const categoryReports = constants_1.SUPPORTED_CATEGORIES.flatMap((category) => {
223
+ const categoryDir = node_path_1.default.join(inputDir, category);
224
+ if (!(0, node_fs_1.existsSync)(categoryDir) || !rootSchemas.has(category)) {
225
+ return [];
226
+ }
227
+ return [categoryValidate(categoryDir, category, emitLogs)];
228
+ });
229
+ return (0, report_1.buildPackageReport)(inputDir, categoryReports);
230
+ }
231
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/parity/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ValidationIssue } from './report';
2
+ interface ClassificationValidationResult {
3
+ valid: boolean;
4
+ errors?: string[];
5
+ }
6
+ export declare function validateElementaryFlowsClassificationHierarchy(classItems: Array<Record<string, unknown>>): ClassificationValidationResult;
7
+ export declare function validateProductFlowsClassificationHierarchy(classItems: Array<Record<string, unknown>>): ClassificationValidationResult;
8
+ export declare function validateProcessesClassificationHierarchy(classItems: Array<Record<string, unknown>>): ClassificationValidationResult;
9
+ export declare function validateSourcesClassificationHierarchy(classItems: Array<Record<string, unknown>> | Record<string, unknown> | undefined): ClassificationValidationResult;
10
+ export declare function validateLocalizedTextLanguageConstraints(node: unknown, currentPath?: string): string[];
11
+ export declare function collectLocalizedTextIssues(jsonItem: unknown, category: string, filePath: string): ValidationIssue[];
12
+ export declare function collectFlowSchemaGapIssues(jsonItem: unknown, category: string, filePath: string): ValidationIssue[];
13
+ export declare function collectClassificationIssues(jsonItem: unknown, category: string, filePath: string): ValidationIssue[];
14
+ export {};
15
+ //# sourceMappingURL=validation-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-rules.d.ts","sourceRoot":"","sources":["../../src/parity/validation-rules.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,UAAU,8BAA8B;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAoCD,wBAAgB,8CAA8C,CAC5D,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,8BAA8B,CAuBhC;AAED,wBAAgB,2CAA2C,CACzD,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,8BAA8B,CAuBhC;AAED,wBAAgB,wCAAwC,CACtD,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,8BAA8B,CAgEhC;AAED,wBAAgB,sCAAsC,CACpD,UAAU,EACN,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,SAAS,GACZ,8BAA8B,CAoChC;AAED,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,OAAO,EACb,WAAW,SAAK,GACf,MAAM,EAAE,CAmDV;AAwCD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,qBAgBjB;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,qBA6CjB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,qBAqKjB"}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateElementaryFlowsClassificationHierarchy = validateElementaryFlowsClassificationHierarchy;
4
+ exports.validateProductFlowsClassificationHierarchy = validateProductFlowsClassificationHierarchy;
5
+ exports.validateProcessesClassificationHierarchy = validateProcessesClassificationHierarchy;
6
+ exports.validateSourcesClassificationHierarchy = validateSourcesClassificationHierarchy;
7
+ exports.validateLocalizedTextLanguageConstraints = validateLocalizedTextLanguageConstraints;
8
+ exports.collectLocalizedTextIssues = collectLocalizedTextIssues;
9
+ exports.collectFlowSchemaGapIssues = collectFlowSchemaGapIssues;
10
+ exports.collectClassificationIssues = collectClassificationIssues;
11
+ const constants_1 = require("./constants");
12
+ function makeIssue(category, filePath, location, message, issueCode = 'schema_error') {
13
+ return {
14
+ issue_code: issueCode,
15
+ severity: 'error',
16
+ category,
17
+ file_path: filePath,
18
+ location,
19
+ message,
20
+ context: {},
21
+ };
22
+ }
23
+ function asRecord(value) {
24
+ return value && typeof value === 'object' && !Array.isArray(value)
25
+ ? value
26
+ : null;
27
+ }
28
+ function ensureArray(value) {
29
+ if (Array.isArray(value)) {
30
+ return value;
31
+ }
32
+ if (value === undefined || value === null) {
33
+ return [];
34
+ }
35
+ return [value];
36
+ }
37
+ function validateElementaryFlowsClassificationHierarchy(classItems) {
38
+ const errors = [];
39
+ classItems.forEach((item, index) => {
40
+ const level = Number(item['@level']);
41
+ if (level !== index) {
42
+ errors.push(`Elementary flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`);
43
+ }
44
+ });
45
+ for (let index = 1; index < classItems.length; index += 1) {
46
+ const parentId = String(classItems[index - 1]?.['@catId'] ?? '');
47
+ const childId = String(classItems[index]?.['@catId'] ?? '');
48
+ if (!childId.startsWith(parentId)) {
49
+ errors.push(`Elementary flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`);
50
+ }
51
+ }
52
+ return errors.length > 0 ? { valid: false, errors } : { valid: true };
53
+ }
54
+ function validateProductFlowsClassificationHierarchy(classItems) {
55
+ const errors = [];
56
+ classItems.forEach((item, index) => {
57
+ const level = Number(item['@level']);
58
+ if (level !== index) {
59
+ errors.push(`Product flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`);
60
+ }
61
+ });
62
+ for (let index = 1; index < classItems.length; index += 1) {
63
+ const parentId = String(classItems[index - 1]?.['@classId'] ?? '');
64
+ const childId = String(classItems[index]?.['@classId'] ?? '');
65
+ if (!childId.startsWith(parentId)) {
66
+ errors.push(`Product flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`);
67
+ }
68
+ }
69
+ return errors.length > 0 ? { valid: false, errors } : { valid: true };
70
+ }
71
+ function validateProcessesClassificationHierarchy(classItems) {
72
+ const errors = [];
73
+ const level0ToLevel1Mapping = {
74
+ A: ['01', '02', '03'],
75
+ B: ['05', '06', '07', '08', '09'],
76
+ C: Array.from({ length: 24 }, (_, index) => String(index + 10).padStart(2, '0')),
77
+ D: ['35'],
78
+ E: ['36', '37', '38', '39'],
79
+ F: ['41', '42', '43'],
80
+ G: ['46', '47'],
81
+ H: ['49', '50', '51', '52', '53'],
82
+ I: ['55', '56'],
83
+ J: ['58', '59', '60'],
84
+ K: ['61', '62', '63'],
85
+ L: ['64', '65', '66'],
86
+ M: ['68'],
87
+ N: ['69', '70', '71', '72', '73', '74', '75'],
88
+ O: ['77', '78', '79', '80', '81', '82'],
89
+ P: ['84'],
90
+ Q: ['85'],
91
+ R: ['86', '87', '88'],
92
+ S: ['90', '91', '92', '93'],
93
+ T: ['94', '95', '96'],
94
+ U: ['97', '98'],
95
+ V: ['99'],
96
+ };
97
+ classItems.forEach((item, index) => {
98
+ const level = Number(item['@level']);
99
+ if (level !== index) {
100
+ errors.push(`Processes classification level sorting error: at index ${index}, expected level ${index}, got ${level}`);
101
+ }
102
+ });
103
+ for (let index = 1; index < classItems.length; index += 1) {
104
+ const parent = classItems[index - 1] ?? {};
105
+ const child = classItems[index] ?? {};
106
+ const parentLevel = Number(parent['@level']);
107
+ const childLevel = Number(child['@level']);
108
+ const parentId = String(parent['@classId'] ?? '');
109
+ const childId = String(child['@classId'] ?? '');
110
+ if (parentLevel === 0 && childLevel === 1) {
111
+ const validCodes = level0ToLevel1Mapping[parentId] ?? [];
112
+ if (!validCodes.includes(childId)) {
113
+ errors.push(`Processes classification code error: level 1 code '${childId}' does not correspond to level 0 code '${parentId}'`);
114
+ }
115
+ continue;
116
+ }
117
+ if (!childId.startsWith(parentId)) {
118
+ errors.push(`Processes classification code error: child code '${childId}' does not start with parent code '${parentId}'`);
119
+ }
120
+ }
121
+ return errors.length > 0 ? { valid: false, errors } : { valid: true };
122
+ }
123
+ function validateSourcesClassificationHierarchy(classItems) {
124
+ const normalizedItems = ensureArray(classItems);
125
+ const errors = [];
126
+ normalizedItems.forEach((item, index) => {
127
+ const level = Number(item['@level']);
128
+ if (!Number.isFinite(level)) {
129
+ errors.push(`Sources classification level parsing error: missing or invalid '@level' at index ${index}`);
130
+ return;
131
+ }
132
+ if (level !== index) {
133
+ errors.push(`Sources classification level sorting error: at index ${index}, expected level ${index}, got ${level}`);
134
+ }
135
+ });
136
+ for (let index = 1; index < normalizedItems.length; index += 1) {
137
+ const parentId = normalizedItems[index - 1]?.['@classId'];
138
+ const childId = normalizedItems[index]?.['@classId'];
139
+ if (typeof parentId !== 'string' || typeof childId !== 'string') {
140
+ errors.push(`Sources classification code error: missing '@classId' for parent index ${index - 1} or child index ${index}`);
141
+ continue;
142
+ }
143
+ if (!childId.startsWith(parentId)) {
144
+ errors.push(`Sources classification code error: child code '${childId}' does not start with parent code '${parentId}'`);
145
+ }
146
+ }
147
+ return errors.length > 0 ? { valid: false, errors } : { valid: true };
148
+ }
149
+ function validateLocalizedTextLanguageConstraints(node, currentPath = '') {
150
+ const errors = [];
151
+ const currentNode = asRecord(node);
152
+ if (currentNode) {
153
+ const language = currentNode['@xml:lang'];
154
+ const text = currentNode['#text'];
155
+ const location = currentPath || '<root>';
156
+ if (typeof language === 'string' && typeof text === 'string') {
157
+ const normalizedLanguage = language.toLowerCase();
158
+ const hasChinese = constants_1.CHINESE_CHARACTER_RE.test(text);
159
+ if ((normalizedLanguage === 'zh' || normalizedLanguage.startsWith('zh-')) &&
160
+ !hasChinese) {
161
+ errors.push(`Localized text error at ${location}: @xml:lang '${language}' must include at least one Chinese character`);
162
+ }
163
+ if ((normalizedLanguage === 'en' || normalizedLanguage.startsWith('en-')) &&
164
+ hasChinese) {
165
+ errors.push(`Localized text error at ${location}: @xml:lang '${language}' must not contain Chinese characters`);
166
+ }
167
+ }
168
+ for (const [key, value] of Object.entries(currentNode)) {
169
+ const childPath = currentPath ? `${currentPath}/${key}` : key;
170
+ errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));
171
+ }
172
+ return errors;
173
+ }
174
+ if (Array.isArray(node)) {
175
+ node.forEach((value, index) => {
176
+ const childPath = currentPath ? `${currentPath}/${index}` : String(index);
177
+ errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));
178
+ });
179
+ }
180
+ return errors;
181
+ }
182
+ function collectFlowClassificationStructureIssues(items, category, filePath, locationBase, requiredIdKey) {
183
+ if (!Array.isArray(items)) {
184
+ return [];
185
+ }
186
+ const issues = [];
187
+ items.forEach((item, index) => {
188
+ const record = asRecord(item);
189
+ if (!record) {
190
+ return;
191
+ }
192
+ for (const fieldName of ['@level', requiredIdKey, '#text']) {
193
+ if (record[fieldName] !== undefined) {
194
+ continue;
195
+ }
196
+ issues.push(makeIssue(category, filePath, `${locationBase}/${index}`, `Schema Error at ${locationBase}/${index}: '${fieldName}' is a required property`));
197
+ }
198
+ });
199
+ return issues;
200
+ }
201
+ function collectLocalizedTextIssues(jsonItem, category, filePath) {
202
+ return validateLocalizedTextLanguageConstraints(jsonItem).map((message) => {
203
+ const location = message.startsWith('Localized text error at ') && message.includes(':')
204
+ ? message.split('Localized text error at ', 2)[1].split(':', 1)[0]
205
+ : '<root>';
206
+ return makeIssue(category, filePath, location, message, 'localized_text_language_error');
207
+ });
208
+ }
209
+ function collectFlowSchemaGapIssues(jsonItem, category, filePath) {
210
+ if (category !== 'flows') {
211
+ return [];
212
+ }
213
+ const flowDataSet = asRecord(asRecord(jsonItem)?.flowDataSet);
214
+ const modellingAndValidation = asRecord(flowDataSet?.modellingAndValidation);
215
+ const lciMethod = asRecord(modellingAndValidation?.LCIMethod);
216
+ const dataSetType = lciMethod?.typeOfDataSet;
217
+ const dataSetInformation = asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation);
218
+ const classificationInformation = asRecord(dataSetInformation?.classificationInformation);
219
+ if (dataSetType === 'Product flow') {
220
+ const classes = asRecord(classificationInformation?.['common:classification'])?.['common:class'];
221
+ return collectFlowClassificationStructureIssues(classes, category, filePath, 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:classification/common:class', '@classId');
222
+ }
223
+ if (dataSetType === 'Elementary flow') {
224
+ const categories = asRecord(classificationInformation?.['common:elementaryFlowCategorization'])?.['common:category'];
225
+ return collectFlowClassificationStructureIssues(categories, category, filePath, 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:elementaryFlowCategorization/common:category', '@catId');
226
+ }
227
+ return [];
228
+ }
229
+ function collectClassificationIssues(jsonItem, category, filePath) {
230
+ const issues = [];
231
+ const root = asRecord(jsonItem);
232
+ try {
233
+ if (category === 'flows') {
234
+ const flowDataSet = asRecord(asRecord(root?.flowDataSet));
235
+ const dataSetType = asRecord(flowDataSet?.modellingAndValidation)
236
+ ?.LCIMethod
237
+ ? asRecord(asRecord(flowDataSet?.modellingAndValidation)?.LCIMethod)?.['typeOfDataSet']
238
+ : undefined;
239
+ if (dataSetType === 'Product flow') {
240
+ const items = asRecord(asRecord(asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)
241
+ ?.classificationInformation)?.['common:classification'])?.['common:class'];
242
+ if (Array.isArray(items)) {
243
+ const result = validateProductFlowsClassificationHierarchy(items.filter((item) => Boolean(asRecord(item))));
244
+ if (!result.valid) {
245
+ issues.push(...(result.errors ?? []).map((message) => makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error')));
246
+ }
247
+ }
248
+ }
249
+ else if (dataSetType === 'Elementary flow') {
250
+ const items = asRecord(asRecord(asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)
251
+ ?.classificationInformation)?.['common:elementaryFlowCategorization'])?.['common:category'];
252
+ if (Array.isArray(items)) {
253
+ const result = validateElementaryFlowsClassificationHierarchy(items.filter((item) => Boolean(asRecord(item))));
254
+ if (!result.valid) {
255
+ issues.push(...(result.errors ?? []).map((message) => makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error')));
256
+ }
257
+ }
258
+ }
259
+ }
260
+ else if (category === 'processes') {
261
+ const items = asRecord(asRecord(asRecord(asRecord(root?.processDataSet)?.processInformation)
262
+ ?.dataSetInformation)?.classificationInformation)?.['common:classification'];
263
+ const classes = asRecord(items)?.['common:class'];
264
+ if (Array.isArray(classes)) {
265
+ const result = validateProcessesClassificationHierarchy(classes.filter((item) => Boolean(asRecord(item))));
266
+ if (!result.valid) {
267
+ issues.push(...(result.errors ?? []).map((message) => makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error')));
268
+ }
269
+ }
270
+ }
271
+ else if (category === 'lifecyclemodels') {
272
+ const items = asRecord(asRecord(asRecord(root?.lifecycleModelDataSet)?.lifecycleModelInformation)?.dataSetInformation)?.classificationInformation;
273
+ const classes = asRecord(asRecord(items)?.['common:classification'])?.['common:class'];
274
+ if (Array.isArray(classes)) {
275
+ const result = validateProcessesClassificationHierarchy(classes.filter((item) => Boolean(asRecord(item))));
276
+ if (!result.valid) {
277
+ issues.push(...(result.errors ?? []).map((message) => makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error')));
278
+ }
279
+ }
280
+ }
281
+ else if (category === 'sources') {
282
+ const classes = asRecord(asRecord(asRecord(asRecord(root?.sourceDataSet)?.sourceInformation)
283
+ ?.dataSetInformation)?.classificationInformation);
284
+ const result = validateSourcesClassificationHierarchy(asRecord(asRecord(classes)?.['common:classification'])?.['common:class']);
285
+ if (!result.valid) {
286
+ issues.push(...(result.errors ?? []).map((message) => makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error')));
287
+ }
288
+ }
289
+ }
290
+ catch {
291
+ return issues;
292
+ }
293
+ return issues;
294
+ }
295
+ //# sourceMappingURL=validation-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-rules.js","sourceRoot":"","sources":["../../src/parity/validation-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- ILCD Format Version 1.1 Schemas Build 983 -->
3
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
4
+ xmlns="http://lca.jrc.it/ILCD/Categories"
5
+ xmlns:categories="http://lca.jrc.it/ILCD/Categories"
6
+ xmlns:common="http://lca.jrc.it/ILCD/Common"
7
+ version="1.1"
8
+ targetNamespace="http://lca.jrc.it/ILCD/Categories"
9
+ elementFormDefault="qualified">
10
+ <xs:import schemaLocation="ILCD_Common_Groups.xsd"
11
+ namespace="http://lca.jrc.it/ILCD/Common"/>
12
+ <xs:complexType name="CategoryType">
13
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
14
+ <xs:element name="category" type="CategoryType"/>
15
+ </xs:choice>
16
+ <xs:attribute name="id" type="xs:string" use="required"/>
17
+ <xs:attribute name="name" type="xs:string" use="required"/>
18
+ <xs:anyAttribute namespace="##other" processContents="lax"/>
19
+ </xs:complexType>
20
+ <xs:complexType name="CategoriesType">
21
+ <xs:sequence>
22
+ <xs:element name="category" type="CategoryType" minOccurs="1" maxOccurs="unbounded"/>
23
+ </xs:sequence>
24
+ <xs:attribute name="dataType" type="categories:DataSetType" use="required"/>
25
+ </xs:complexType>
26
+ <xs:complexType name="CategorySystemType">
27
+ <xs:sequence>
28
+ <xs:element name="referenceToSource" type="common:GlobalReferenceType" minOccurs="0"/>
29
+ <xs:element name="categories" type="categories:CategoriesType" maxOccurs="8"/>
30
+ </xs:sequence>
31
+ <xs:attribute name="name" type="xs:string"/>
32
+ </xs:complexType>
33
+ <xs:element name="CategorySystem" type="categories:CategorySystemType"/>
34
+ <xs:simpleType name="DataSetType">
35
+ <xs:restriction base="xs:string">
36
+ <xs:enumeration value="Process"/>
37
+ <xs:enumeration value="LCIAMethod"/>
38
+ <xs:enumeration value="Flow"/>
39
+ <xs:enumeration value="FlowProperty"/>
40
+ <xs:enumeration value="UnitGroup"/>
41
+ <xs:enumeration value="Source"/>
42
+ <xs:enumeration value="Contact"/>
43
+ <xs:enumeration value="LifeCycleModel"/>
44
+ </xs:restriction>
45
+ </xs:simpleType>
46
+ </xs:schema>