@tiangong-lca/cli 0.0.8 → 0.0.10

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-qa.js","sourceRoot":"","sources":["../../../src/lib/process-qa.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport { getRuntimeRuleset, resolveRuntimeRuleId } from './runtime-rulesets.js';\n\ntype JsonRecord = Record<string, unknown>;\n\nconst KIND_RE = /\\[tg_io_kind_tag=([^\\]]+)\\]/gu;\nconst UOM_RE = /\\[tg_io_uom_tag=([^\\]]+)\\]/gu;\n\nconst ENERGY_WORDS = [\n 'electric',\n 'electricity',\n 'kwh',\n 'mj',\n 'heat',\n 'steam',\n 'fuel',\n 'diesel',\n 'gas',\n 'power',\n '电',\n '能',\n] as const;\n\nconst RAW_WORDS = [\n 'raw material',\n 'feedstock',\n 'fertilizer',\n 'water',\n 'seed',\n 'pesticide',\n '原材料',\n '投入',\n '肥料',\n '种子',\n '农药',\n '用水',\n] as const;\n\nconst BYP_WORDS = ['by-product', 'co-product', '副产品', '联产'] as const;\nconst WASTE_WORDS = ['waste', '废', 'residue', 'sludge'] as const;\n\ntype BaseInfoCheck = {\n source_name_ok: boolean;\n functional_unit_ok: boolean;\n system_boundary_ok: boolean;\n time_ok: boolean;\n geo_ok: boolean;\n tech_ok: boolean;\n admin_ok: boolean;\n completeness_score: number;\n base_names: string[];\n};\n\ntype ClassifiedExchange = {\n classification:\n | 'raw_material_input'\n | 'energy_input'\n | 'other_input'\n | 'product_output'\n | 'byproduct_output'\n | 'waste_output'\n | 'other_output'\n | 'other';\n kinds: string[];\n uoms: string[];\n blob: string;\n source_input_group: string | null;\n source_output_group: string | null;\n reference_flow: boolean;\n};\n\ntype UnitIssue = {\n flow_uuid: string;\n current_unit: string;\n suggested_unit: string;\n basis: string;\n confidence: string;\n};\n\ntype ProcessQaRow = {\n process_file: string;\n raw_input: number;\n product: number;\n byproduct: number;\n waste: number;\n energy_excluded: number;\n delta: number;\n relative_deviation: number | null;\n};\n\ntype ProcessQaTotals = {\n raw_input: number;\n product_plus_byproduct_plus_waste: number;\n delta: number;\n relative_deviation: number | null;\n energy_excluded: number;\n};\n\ntype ProcessQaFinding = {\n process_file: string;\n severity: 'info' | 'warning' | 'blocker';\n code: string;\n methodology_rule_id: string | null;\n message: string;\n source: 'rule';\n evidence?: JsonRecord;\n};\n\ntype ProcessRulesetGate = {\n status: 'passed' | 'needs_review' | 'blocked';\n ruleset_id: 'process-authoring/strict';\n ruleset_version: '1';\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n counts: {\n findings: number;\n blockers: number;\n };\n blockers: ProcessQaFinding[];\n next_action: 'continue' | 'review_findings_in_foundry' | 'fix_blockers';\n};\n\ntype ProcessSummaryForLlm = {\n process_file: string;\n base_names: string[];\n base_checks: {\n source_name_ok: boolean;\n functional_unit_ok: boolean;\n system_boundary_ok: boolean;\n time_ok: boolean;\n geo_ok: boolean;\n tech_ok: boolean;\n admin_ok: boolean;\n };\n balance: {\n raw_in: number;\n product: number;\n byproduct: number;\n waste: number;\n energy_excluded: number;\n relative_deviation: number | null;\n };\n};\n\nexport type ProcessQaLlmResult =\n | {\n enabled: false;\n reason: string;\n }\n | {\n enabled: true;\n ok: true;\n result: JsonRecord;\n }\n | {\n enabled: true;\n ok: false;\n reason: string;\n raw?: string;\n };\n\nexport type ProcessQaSummary = {\n run_id: string;\n logic_version: string;\n process_count: number;\n totals: ProcessQaTotals;\n ruleset_gate?: ProcessRulesetGate;\n llm: ProcessQaLlmResult;\n policy_decision_owner: 'foundry';\n qa_mode: 'deterministic_qa_report';\n};\n\nexport type ProcessQaReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_process_qa';\n run_id: string;\n run_root: string;\n rows_file: string;\n out_dir: string;\n input_mode: 'rows_file' | 'run_root';\n effective_processes_dir: string;\n logic_version: string;\n ruleset_id?: 'process-authoring/strict';\n ruleset_version?: '1';\n ruleset_source_version?: string;\n ruleset_rule_ids?: string[];\n process_count: number;\n totals: ProcessQaTotals;\n rule_finding_count?: number;\n blocker_count?: number;\n ruleset_gate?: ProcessRulesetGate;\n policy_decision_owner: 'foundry';\n qa_mode: 'deterministic_qa_report';\n files: {\n qa_input_summary: string;\n materialization_summary: string | null;\n rule_findings?: string;\n ruleset_gate?: string;\n qa_zh: string;\n qa_en: string;\n timing: string;\n unit_issue_log: string;\n summary: string;\n report: string;\n };\n llm: ProcessQaLlmResult;\n};\n\nexport type RunProcessQaOptions = {\n rowsFile?: string;\n runRoot?: string;\n runId?: string;\n outDir: string;\n startTs?: string;\n endTs?: string;\n logicVersion?: string;\n enableLlm?: boolean;\n llmModel?: string;\n llmMaxProcesses?: number;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n now?: () => Date;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nfunction requiredNonEmpty(value: string | undefined, label: string, code: string): string {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n\n throw new CliError(`Missing required ${label}.`, {\n code,\n exitCode: 2,\n });\n}\n\nfunction textFromValue(value: unknown): string {\n if (Array.isArray(value)) {\n return value\n .filter(isRecord)\n .map((item) => String(item['#text'] ?? ''))\n .join(' ');\n }\n\n if (isRecord(value)) {\n return String(value['#text'] ?? '');\n }\n\n return String(value ?? '');\n}\n\nfunction toNumber(value: unknown): number {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : 0;\n }\n\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n return 0;\n}\n\nfunction deepGet(value: unknown, pathParts: string[]): unknown {\n let current: unknown = value;\n\n for (const key of pathParts) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[key];\n if (current === undefined || current === null) {\n return undefined;\n }\n }\n\n return current;\n}\n\nfunction hasNonEmpty(value: unknown): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => hasNonEmpty(item));\n }\n\n if (isRecord(value)) {\n if ('#text' in value) {\n return hasNonEmpty(value['#text']);\n }\n return Object.values(value).some((item) => hasNonEmpty(item));\n }\n\n return true;\n}\n\nfunction extractBaseNames(processPayload: JsonRecord): [boolean, string[]] {\n const base = deepGet(processPayload, [\n 'processDataSet',\n 'processInformation',\n 'dataSetInformation',\n 'name',\n 'baseName',\n ]);\n const items = Array.isArray(base) ? base : base ? [base] : [];\n const values: string[] = [];\n\n items.forEach((item) => {\n if (!isRecord(item)) {\n return;\n }\n const text = String(item['#text'] ?? '').trim();\n if (!text) {\n return;\n }\n values.push(text);\n });\n\n return [values.length > 0, values];\n}\n\nfunction sourceTracePayload(exchange: JsonRecord): JsonRecord | null {\n const payload = deepGet(exchange, ['common:other', 'tidasimport:sourceTrace', 'payload']);\n if (!isRecord(payload)) {\n return null;\n }\n return isRecord(payload.sourceTrace) ? payload.sourceTrace : payload;\n}\n\nfunction sourceClassification(exchange: JsonRecord): JsonRecord {\n const payload = sourceTracePayload(exchange);\n return payload && isRecord(payload.sourceClassification) ? payload.sourceClassification : {};\n}\n\nfunction sourceGroup(exchange: JsonRecord, groupName: 'inputGroup' | 'outputGroup'): string | null {\n const value = sourceClassification(exchange)[groupName];\n const text = String(value ?? '').trim();\n return text || null;\n}\n\nfunction classifyExchange(\n exchange: JsonRecord,\n referenceFlowId: string | null = null,\n): ClassifiedExchange {\n const comments =\n `${textFromValue(exchange.commonComment)} ${textFromValue(exchange.generalComment)}`.toLowerCase();\n const flowDescription = textFromValue(\n isRecord(exchange.referenceToFlowDataSet)\n ? exchange.referenceToFlowDataSet['common:shortDescription']\n : undefined,\n ).toLowerCase();\n const blob = `${comments} ${flowDescription}`.trim();\n const kinds = Array.from(blob.matchAll(KIND_RE), (match) => match[1].toLowerCase());\n const kindSet = new Set(kinds);\n const uoms = Array.from(blob.matchAll(UOM_RE), (match) => match[1].toLowerCase());\n const direction = String(exchange.exchangeDirection ?? '').toLowerCase();\n const inputGroup = sourceGroup(exchange, 'inputGroup');\n const outputGroup = sourceGroup(exchange, 'outputGroup');\n const internalId = String(exchange['@dataSetInternalID'] ?? '').trim();\n const isReferenceFlow = Boolean(referenceFlowId && internalId === referenceFlowId);\n const meta = {\n kinds,\n uoms,\n blob,\n source_input_group: inputGroup,\n source_output_group: outputGroup,\n reference_flow: isReferenceFlow,\n };\n const isEnergy =\n ENERGY_WORDS.some((word) => blob.includes(word)) ||\n uoms.some((uom) => uom === 'kwh' || uom === 'mj' || uom === 'gj');\n\n if (direction === 'input') {\n if (kindSet.has('energy') || isEnergy) {\n return { classification: 'energy_input', ...meta };\n }\n if (kindSet.has('waste')) {\n return { classification: 'other_input', ...meta };\n }\n if (inputGroup === '4' || kindSet.has('raw_material') || kindSet.has('resource')) {\n return { classification: 'raw_material_input', ...meta };\n }\n if (kindSet.has('product') || RAW_WORDS.some((word) => blob.includes(word))) {\n return { classification: 'raw_material_input', ...meta };\n }\n return { classification: 'other_input', ...meta };\n }\n\n if (direction === 'output') {\n if (isReferenceFlow || outputGroup === '0') {\n return { classification: 'product_output', ...meta };\n }\n if (\n kindSet.has('waste') ||\n outputGroup === '4' ||\n outputGroup === '5' ||\n WASTE_WORDS.some((word) => blob.includes(word))\n ) {\n return { classification: 'waste_output', ...meta };\n }\n if (BYP_WORDS.some((word) => blob.includes(word))) {\n return { classification: 'byproduct_output', ...meta };\n }\n if (kindSet.has('product')) {\n return { classification: 'product_output', ...meta };\n }\n return { classification: 'other_output', ...meta };\n }\n\n return { classification: 'other', ...meta };\n}\n\nfunction unitIssueCheck(exchange: JsonRecord, uoms: string[], blob: string): UnitIssue[] {\n const flowUuid = isRecord(exchange.referenceToFlowDataSet)\n ? String(exchange.referenceToFlowDataSet['@refObjectId'] ?? '')\n : '';\n\n if (!flowUuid) {\n return [];\n }\n\n const currentUnit = uoms[0] ?? '';\n if (\n ['electric', 'electricity', '交流电', '电力'].some((word) => blob.includes(word)) &&\n currentUnit &&\n !['kwh', 'mj', 'gj'].includes(currentUnit)\n ) {\n return [\n {\n flow_uuid: flowUuid,\n current_unit: currentUnit,\n suggested_unit: 'kWh',\n basis: 'flow 描述为电力/电能,但 uom 标签非能量单位',\n confidence: '高',\n },\n ];\n }\n\n if (\n ['water', '用水', '工艺用水'].some((word) => blob.includes(word)) &&\n currentUnit &&\n ['kwh', 'mj', 'gj'].includes(currentUnit)\n ) {\n return [\n {\n flow_uuid: flowUuid,\n current_unit: currentUnit,\n suggested_unit: 'm3 或 kg',\n basis: 'flow 描述为水,但 uom 标签为能量单位',\n confidence: '高',\n },\n ];\n }\n\n if (\n ['co2', 'carbon dioxide', '二氧化碳'].some((word) => blob.includes(word)) &&\n currentUnit &&\n ['kwh', 'mj', 'gj'].includes(currentUnit)\n ) {\n return [\n {\n flow_uuid: flowUuid,\n current_unit: currentUnit,\n suggested_unit: 'kg',\n basis: '排放流通常质量单位计,当前为能量单位',\n confidence: '中',\n },\n ];\n }\n\n return [];\n}\n\nfunction hasNumericAmount(exchange: JsonRecord): boolean {\n for (const key of ['meanAmount', 'resultingAmount']) {\n const value = exchange[key];\n if (typeof value === 'number' && Number.isFinite(value)) {\n return true;\n }\n if (typeof value === 'string' && value.trim() && Number.isFinite(Number(value))) {\n return true;\n }\n }\n return false;\n}\n\nfunction createProcessQaFinding(options: {\n processFile: string;\n severity: ProcessQaFinding['severity'];\n code: string;\n message: string;\n evidence?: JsonRecord;\n}): ProcessQaFinding {\n const methodologyRuleId = resolveRuntimeRuleId('process-authoring/strict', options.code);\n return {\n process_file: options.processFile,\n severity: options.severity,\n code: options.code,\n methodology_rule_id: methodologyRuleId,\n message: options.message,\n source: 'rule',\n ...(options.evidence ? { evidence: options.evidence } : {}),\n };\n}\n\nfunction reviewFindingsForBase(processFile: string, base: BaseInfoCheck): ProcessQaFinding[] {\n const findings: ProcessQaFinding[] = [];\n if (!base.source_name_ok) {\n findings.push(\n createProcessQaFinding({\n processFile,\n severity: 'warning',\n code: 'process_missing_source_base_name',\n message:\n 'Process baseName should include a usable source-language entry before Foundry authoring is complete.',\n evidence: { base_names: base.base_names },\n }),\n );\n }\n if (!base.functional_unit_ok) {\n findings.push(\n createProcessQaFinding({\n processFile,\n severity: 'warning',\n code: 'process_missing_functional_unit',\n message:\n 'Process quantitative reference functionalUnitOrOther is missing and should be curated by Foundry.',\n }),\n );\n }\n for (const [ok, code, message] of [\n [\n base.system_boundary_ok,\n 'process_missing_system_boundary',\n 'Process system boundary or typeOfDataSet context is missing.',\n ],\n [base.time_ok, 'process_missing_time', 'Process time coverage is missing.'],\n [base.geo_ok, 'process_missing_geography', 'Process geography is missing.'],\n [base.tech_ok, 'process_missing_technology', 'Process technology description is missing.'],\n [\n base.admin_ok,\n 'process_missing_admin_metadata',\n 'Process administrative metadata is missing.',\n ],\n ] as const) {\n if (!ok) {\n findings.push(\n createProcessQaFinding({\n processFile,\n severity: 'warning',\n code,\n message,\n }),\n );\n }\n }\n return findings;\n}\n\nfunction processRulesetGate(findings: ProcessQaFinding[]): ProcessRulesetGate {\n const ruleset = getRuntimeRuleset('process-authoring/strict');\n const blockers = findings.filter((finding) => finding.severity === 'blocker');\n const status = blockers.length > 0 ? 'blocked' : findings.length > 0 ? 'needs_review' : 'passed';\n return {\n status,\n ruleset_id: ruleset.id,\n ruleset_version: ruleset.version,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n counts: {\n findings: findings.length,\n blockers: blockers.length,\n },\n blockers,\n next_action:\n status === 'blocked'\n ? 'fix_blockers'\n : status === 'needs_review'\n ? 'review_findings_in_foundry'\n : 'continue',\n };\n}\n\nfunction baseInfoCheck(processPayload: JsonRecord): BaseInfoCheck {\n const [sourceNameOk, values] = extractBaseNames(processPayload);\n const functionalUnit = deepGet(processPayload, [\n 'processDataSet',\n 'processInformation',\n 'quantitativeReference',\n 'functionalUnitOrOther',\n ]);\n const mixAndLocation = deepGet(processPayload, [\n 'processDataSet',\n 'processInformation',\n 'geography',\n 'mixAndLocationTypes',\n ]);\n const route = deepGet(processPayload, [\n 'processDataSet',\n 'modellingAndValidation',\n 'LCIMethodAndAllocation',\n 'typeOfDataSet',\n ]);\n const time = deepGet(processPayload, ['processDataSet', 'processInformation', 'time']);\n const geography = deepGet(processPayload, ['processDataSet', 'processInformation', 'geography']);\n const technology = deepGet(processPayload, ['processDataSet', 'modellingAndValidation']);\n const administrativeInformation = deepGet(processPayload, [\n 'processDataSet',\n 'administrativeInformation',\n ]);\n\n const functionalUnitOk = hasNonEmpty(functionalUnit);\n const systemBoundaryOk = hasNonEmpty(mixAndLocation) || hasNonEmpty(route);\n const timeOk = hasNonEmpty(time);\n const geographyOk = hasNonEmpty(geography);\n const technologyOk = hasNonEmpty(technology);\n const administrativeOk = hasNonEmpty(administrativeInformation);\n const completenessScore = [\n sourceNameOk,\n functionalUnitOk,\n systemBoundaryOk,\n timeOk,\n geographyOk,\n technologyOk,\n administrativeOk,\n ].filter(Boolean).length;\n\n return {\n source_name_ok: sourceNameOk,\n functional_unit_ok: functionalUnitOk,\n system_boundary_ok: systemBoundaryOk,\n time_ok: timeOk,\n geo_ok: geographyOk,\n tech_ok: technologyOk,\n admin_ok: administrativeOk,\n completeness_score: completenessScore,\n base_names: values,\n };\n}\n\nfunction unwrapProcessPayload(value: unknown, filePath: string): JsonRecord {\n if (!isRecord(value)) {\n throw new CliError(`Expected process QA file to contain a JSON object: ${filePath}`, {\n code: 'PROCESS_QA_INPUT_INVALID',\n exitCode: 2,\n });\n }\n\n const candidate =\n (isRecord(value.process) && value.process) ||\n (isRecord(value.json_ordered) && value.json_ordered) ||\n (isRecord(value.jsonOrdered) && value.jsonOrdered) ||\n (isRecord(value.json) && value.json) ||\n value;\n\n if (!isRecord(candidate.processDataSet)) {\n throw new CliError(`Process QA file is missing processDataSet: ${filePath}`, {\n code: 'PROCESS_QA_INPUT_INVALID',\n exitCode: 2,\n });\n }\n\n return candidate;\n}\n\nfunction extractProcessIdentity(value: JsonRecord, index: number): { id: string; version: string } {\n const payload = unwrapProcessPayload(value, `row-${index + 1}`);\n const root = payload.processDataSet as JsonRecord;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const id =\n String(dataSetInformation['common:UUID'] ?? value.id ?? '').trim() || `row-${index + 1}`;\n const version =\n String(publicationAndOwnership['common:dataSetVersion'] ?? value.version ?? '').trim() ||\n '01.00.000';\n return {\n id,\n version,\n };\n}\n\nfunction loadReviewRows(rowsFile: string): JsonRecord[] {\n const resolved = path.resolve(rowsFile);\n const text = readFileSync(resolved, 'utf8');\n\n if (resolved.endsWith('.jsonl')) {\n return text\n .split(/\\r?\\n/gu)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n const parsed = JSON.parse(line) as unknown;\n if (!isRecord(parsed)) {\n throw new CliError(`Expected JSON object rows in JSONL file: ${resolved}`, {\n code: 'PROCESS_QA_ROWS_INVALID_JSONL_ROW',\n exitCode: 2,\n });\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(`Process QA rows file contains invalid JSONL at line ${index + 1}.`, {\n code: 'PROCESS_QA_ROWS_INVALID_JSONL',\n exitCode: 2,\n details: String(error),\n });\n }\n });\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(text) as unknown;\n } catch (error) {\n throw new CliError(`Process QA rows file is not valid JSON: ${resolved}`, {\n code: 'PROCESS_QA_ROWS_INVALID_JSON',\n exitCode: 2,\n details: String(error),\n });\n }\n if (Array.isArray(parsed) && parsed.every(isRecord)) {\n return parsed;\n }\n\n if (isRecord(parsed) && Array.isArray(parsed.rows) && parsed.rows.every(isRecord)) {\n return parsed.rows;\n }\n\n throw new CliError(`Expected JSON array of objects or a report object with rows[]: ${resolved}`, {\n code: 'PROCESS_QA_ROWS_INVALID_JSON',\n exitCode: 2,\n });\n}\n\nfunction materializeRowsFile(\n rowsFile: string,\n outDir: string,\n): { processesDir: string; summaryPath: string } {\n const rows = loadReviewRows(rowsFile);\n const targetDir = path.join(outDir, 'qa-input', 'processes');\n mkdirSync(targetDir, { recursive: true });\n\n const byKey: Record<string, JsonRecord> = {};\n let duplicateCount = 0;\n rows.forEach((row, index) => {\n const payload = unwrapProcessPayload(row, `${rowsFile}#${index + 1}`);\n const identity = extractProcessIdentity(row, index);\n const key = `${identity.id}@${identity.version}`;\n if (key in byKey) {\n duplicateCount += 1;\n }\n byKey[key] = payload;\n });\n\n const items: Array<{ process_key: string; file: string }> = [];\n Object.entries(byKey)\n .sort(([left], [right]) => left.localeCompare(right))\n .forEach(([key, payload]) => {\n const { id, version } = extractProcessIdentity(payload, 0);\n const fileName = `${id}__${version}.json`;\n const filePath = path.join(targetDir, fileName);\n writeJsonArtifact(filePath, payload);\n items.push({\n process_key: key,\n file: filePath,\n });\n });\n\n const summaryPath = path.join(outDir, 'qa-input', 'materialization-summary.json');\n writeJsonArtifact(summaryPath, {\n source_rows_file: path.resolve(rowsFile),\n input_row_count: rows.length,\n materialized_process_count: Object.keys(byKey).length,\n duplicate_input_rows_collapsed: duplicateCount,\n processes_dir: targetDir,\n items,\n });\n\n return {\n processesDir: targetDir,\n summaryPath,\n };\n}\n\nfunction resolveReviewInput(options: {\n rowsFile?: string;\n runRoot?: string;\n runId?: string;\n outDir: string;\n}): {\n inputMode: 'rows_file' | 'run_root';\n effectiveProcessesDir: string;\n materializationSummaryPath: string | null;\n runId: string;\n runRoot: string;\n rowsFile: string;\n reviewInputSummary: JsonRecord;\n} {\n const declaredModes = [Boolean(options.rowsFile), Boolean(options.runRoot)].filter(Boolean);\n if (declaredModes.length !== 1) {\n throw new CliError('Process QA requires exactly one of --rows-file or --run-root.', {\n code: 'PROCESS_QA_INPUT_MODE_REQUIRED',\n exitCode: 2,\n });\n }\n\n if (options.rowsFile) {\n const materialized = materializeRowsFile(options.rowsFile, options.outDir);\n return {\n inputMode: 'rows_file',\n effectiveProcessesDir: materialized.processesDir,\n materializationSummaryPath: materialized.summaryPath,\n runId: options.runId?.trim() || path.parse(options.rowsFile).name,\n runRoot: '',\n rowsFile: path.resolve(options.rowsFile),\n reviewInputSummary: {\n input_mode: 'rows_file',\n rows_file: path.resolve(options.rowsFile),\n run_root: '',\n materialized_processes_dir: materialized.processesDir,\n effective_processes_dir: materialized.processesDir,\n },\n };\n }\n\n const runRoot = path.resolve(options.runRoot!);\n const effective = path.join(runRoot, 'exports', 'processes');\n return {\n inputMode: 'run_root',\n effectiveProcessesDir: effective,\n materializationSummaryPath: null,\n runId: options.runId?.trim() || path.basename(runRoot),\n runRoot,\n rowsFile: '',\n reviewInputSummary: {\n input_mode: 'run_root',\n rows_file: '',\n run_root: runRoot,\n materialized_processes_dir: '',\n effective_processes_dir: effective,\n },\n };\n}\n\nfunction readProcessFiles(processDir: string): string[] {\n if (!existsSync(processDir) || !statSync(processDir).isDirectory()) {\n throw new CliError(`Process QA directory not found: ${processDir}`, {\n code: 'PROCESS_QA_EXPORTS_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return readdirSync(processDir)\n .filter((entry) => entry.endsWith('.json'))\n .sort()\n .map((entry) => path.join(processDir, entry));\n}\n\nfunction buildPrompt(processSummaries: ProcessSummaryForLlm[]): string {\n return [\n '请基于以下 process 摘要做语义一致性审核(源语言名称、边界表达、修订建议)。',\n '要求:',\n '1) 只根据给定摘要;',\n '2) 证据不足必须明确标注;',\n '3) 输出 JSON,格式:{\"findings\":[{\"process_file\",\"severity\",\"fixability\",\"evidence\",\"action\"}]}。',\n '',\n `输入摘要:\\n${JSON.stringify(processSummaries, null, 2)}`,\n ].join('\\n');\n}\n\nfunction parseLlmJsonOutput(output: string): JsonRecord | null {\n const start = output.indexOf('{');\n const end = output.lastIndexOf('}');\n const candidate = start >= 0 && end > start ? output.slice(start, end + 1) : output;\n\n try {\n const parsed = JSON.parse(candidate) as unknown;\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\nasync function runOptionalLlmReview(\n processSummaries: ProcessSummaryForLlm[],\n options: {\n enableLlm: boolean;\n llmModel: string | undefined;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n outDir: string;\n },\n): Promise<ProcessQaLlmResult> {\n void processSummaries;\n void options.env;\n void options.fetchImpl;\n void options.outDir;\n\n if (!options.enableLlm) {\n return {\n enabled: false,\n reason: 'disabled',\n };\n }\n\n return {\n enabled: false,\n reason: 'moved_to_foundry_process_curation',\n };\n}\n\nfunction formatPercent(value: number | null): string {\n return value === null ? '' : `${(value * 100).toFixed(2)}%`;\n}\n\nfunction renderZhReview(options: {\n runId: string;\n logicVersion: string;\n baseRows: Array<[string, BaseInfoCheck]>;\n rows: ProcessQaRow[];\n totals: ProcessQaTotals;\n llmResult: ProcessQaLlmResult;\n evidenceStrong: string[];\n evidenceWeak: string[];\n}): string {\n const lines = [\n '# one_flow_rerun_qa_v2_1_zh\\n',\n `- run_id: \\`${options.runId}\\`\\n`,\n `- logic_version: \\`${options.logicVersion}\\`\\n`,\n '\\n## 2.1 基础信息核查\\n',\n '|process file|源语言名称|功能单位|系统边界|时间|地理|技术|管理元数据|完整性得分(0-7)|\\n',\n '|---|---|---|---|---|---|---|---|---:|\\n',\n ];\n\n options.baseRows.forEach(([fileName, base]) => {\n lines.push(\n `|${fileName}|${base.source_name_ok ? '✅' : '❌'}|${base.functional_unit_ok ? '✅' : '❌'}|${base.system_boundary_ok ? '✅' : '❌'}|${base.time_ok ? '✅' : '❌'}|${base.geo_ok ? '✅' : '❌'}|${base.tech_ok ? '✅' : '❌'}|${base.admin_ok ? '✅' : '❌'}|${base.completeness_score}|\\n`,\n );\n });\n\n lines.push(\n '\\n## 物料平衡口径\\n- 物料平衡:仅核查 `原材料投入 = 产品+副产品+废物`\\n- 能量投入:单列记录,不计入平衡\\n',\n );\n lines.push(\n '\\n## 分过程结果\\n|process file|原材料投入|产品|副产品|废物|能量投入(不计平衡)|差值(输出-投入)|相对偏差|\\n|---|---:|---:|---:|---:|---:|---:|---:|\\n',\n );\n\n options.rows.forEach((row) => {\n lines.push(\n `|${row.process_file}|${row.raw_input.toPrecision(6)}|${row.product.toPrecision(6)}|${row.byproduct.toPrecision(6)}|${row.waste.toPrecision(6)}|${row.energy_excluded.toPrecision(6)}|${row.delta.toPrecision(6)}|${formatPercent(row.relative_deviation)}|\\n`,\n );\n });\n\n lines.push(\n `\\n## 汇总\\n- 原材料投入合计: **${options.totals.raw_input.toPrecision(6)}**\\n- 产品+副产品+废物合计: **${options.totals.product_plus_byproduct_plus_waste.toPrecision(6)}**\\n- 差值(输出-投入): **${options.totals.delta.toPrecision(6)}**\\n- 相对偏差: **${formatPercent(options.totals.relative_deviation)}**\\n- 能量投入(不计平衡)合计: **${options.totals.energy_excluded.toPrecision(6)}**\\n`,\n );\n lines.push('\\n## LLM 语义审核层(可选)\\n');\n\n if (options.llmResult.enabled && options.llmResult.ok) {\n const findings = Array.isArray(options.llmResult.result.findings)\n ? options.llmResult.result.findings\n : [];\n if (findings.length > 0) {\n lines.push('\\n|process file|severity|fixability|evidence|action|\\n|---|---|---|---|---|\\n');\n findings.slice(0, 50).forEach((finding) => {\n const evidenceValue = isRecord(finding) ? finding.evidence : '';\n const evidence =\n typeof evidenceValue === 'string'\n ? evidenceValue\n : JSON.stringify(evidenceValue ?? '', null, 0);\n const action = isRecord(finding) ? String(finding.action ?? finding.suggestion ?? '') : '';\n lines.push(\n `|${String(isRecord(finding) ? (finding.process_file ?? '') : '').replaceAll('|', '/')}|${String(isRecord(finding) ? (finding.severity ?? '') : '').replaceAll('|', '/')}|${String(isRecord(finding) ? (finding.fixability ?? 'review-needed') : 'review-needed').replaceAll('|', '/')}|${evidence.replaceAll('|', '/')}|${action.replaceAll('|', '/')}|\\n`,\n );\n });\n }\n } else {\n lines.push(`- 未启用或调用失败:\\`${options.llmResult.reason}\\`\\n`);\n }\n\n lines.push(\n `\\n## 证据充足的结论\\n${options.evidenceStrong.map((item) => `- ${item}`).join('\\n')}\\n`,\n );\n lines.push(\n `\\n## 证据不足的结论/限制\\n${options.evidenceWeak.map((item) => `- ${item}`).join('\\n')}\\n`,\n );\n\n return lines.join('');\n}\n\nfunction renderEnReview(options: {\n runId: string;\n logicVersion: string;\n baseRows: Array<[string, BaseInfoCheck]>;\n rows: ProcessQaRow[];\n totals: ProcessQaTotals;\n evidenceStrong: string[];\n evidenceWeak: string[];\n}): string {\n const lines = [\n '# one_flow_rerun_qa_v2_1_en\\n',\n `- run_id: \\`${options.runId}\\`\\n`,\n `- logic_version: \\`${options.logicVersion}\\`\\n`,\n '\\n## 2.1 Basic info checks\\n',\n '|process file|source-language name|functional unit|system boundary|time|geo|tech|admin metadata|completeness(0-7)|\\n',\n '|---|---|---|---|---|---|---|---|---:|\\n',\n ];\n\n options.baseRows.forEach(([fileName, base]) => {\n lines.push(\n `|${fileName}|${base.source_name_ok ? '✅' : '❌'}|${base.functional_unit_ok ? '✅' : '❌'}|${base.system_boundary_ok ? '✅' : '❌'}|${base.time_ok ? '✅' : '❌'}|${base.geo_ok ? '✅' : '❌'}|${base.tech_ok ? '✅' : '❌'}|${base.admin_ok ? '✅' : '❌'}|${base.completeness_score}|\\n`,\n );\n });\n\n lines.push(\n '\\n## Material balance scope\\n- Check only `raw material input = product + by-product + waste`\\n- Energy inputs are listed but excluded from balance\\n',\n );\n lines.push(\n '\\n## Per-process results\\n|process file|raw material in|product|by-product|waste|energy in (excluded)|delta(out-in)|relative deviation|\\n|---|---:|---:|---:|---:|---:|---:|---:|\\n',\n );\n\n options.rows.forEach((row) => {\n lines.push(\n `|${row.process_file}|${row.raw_input.toPrecision(6)}|${row.product.toPrecision(6)}|${row.byproduct.toPrecision(6)}|${row.waste.toPrecision(6)}|${row.energy_excluded.toPrecision(6)}|${row.delta.toPrecision(6)}|${formatPercent(row.relative_deviation)}|\\n`,\n );\n });\n\n lines.push(\n `\\n## Summary\\n- Raw material input total: **${options.totals.raw_input.toPrecision(6)}**\\n- Product+by-product+waste total: **${options.totals.product_plus_byproduct_plus_waste.toPrecision(6)}**\\n- Delta (out-in): **${options.totals.delta.toPrecision(6)}**\\n- Relative deviation: **${formatPercent(options.totals.relative_deviation)}**\\n- Energy input total (excluded from balance): **${options.totals.energy_excluded.toPrecision(6)}**\\n`,\n );\n lines.push(\n `\\n## Evidence-sufficient conclusions\\n${options.evidenceStrong.map((item) => `- ${item}`).join('\\n')}\\n`,\n );\n lines.push(\n `\\n## Evidence-insufficient conclusions / limitations\\n${options.evidenceWeak.map((item) => `- ${item}`).join('\\n')}\\n`,\n );\n\n return lines.join('');\n}\n\nfunction renderTiming(options: {\n runId: string;\n startTs: string | undefined;\n endTs: string | undefined;\n processCount: number;\n}): string {\n const lines = ['# one_flow_rerun_timing\\n', `- run_id: \\`${options.runId}\\`\\n`];\n\n if (options.startTs && options.endTs) {\n const start = new Date(options.startTs);\n const end = new Date(options.endTs);\n if (Number.isNaN(start.getTime()) || Number.isNaN(end.getTime())) {\n throw new CliError('Expected --start-ts and --end-ts to be valid ISO timestamps.', {\n code: 'PROCESS_QA_INVALID_TIMESTAMP',\n exitCode: 2,\n });\n }\n lines.push(`- start: \\`${options.startTs}\\`\\n`);\n lines.push(`- end: \\`${options.endTs}\\`\\n`);\n lines.push(\n `- total elapsed: **${((end.getTime() - start.getTime()) / 60_000).toFixed(2)} min**\\n`,\n );\n }\n\n lines.push(`- process files reviewed: \\`${options.processCount}\\`\\n`);\n lines.push(\n '- major time consumers: references retrieval, flow matching/search, flow metadata lookups.\\n',\n );\n return lines.join('');\n}\n\nfunction renderUnitIssues(runId: string, unitIssues: UnitIssue[]): string {\n const lines = [\n '# flow_unit_issue_log\\n',\n `- run_id: \\`${runId}\\`\\n`,\n '\\n|flow UUID|current unit|suggested unit|basis|confidence|\\n|---|---|---|---|---|\\n',\n ];\n\n if (unitIssues.length === 0) {\n lines.push('|无|无|无|未发现基于直接证据的单位矛盾|—|\\n');\n return lines.join('');\n }\n\n const seen = new Set<string>();\n unitIssues.forEach((issue) => {\n const key = JSON.stringify(issue);\n if (seen.has(key)) {\n return;\n }\n seen.add(key);\n lines.push(\n `|${issue.flow_uuid}|${issue.current_unit}|${issue.suggested_unit}|${issue.basis}|${issue.confidence}|\\n`,\n );\n });\n\n return lines.join('');\n}\n\nexport async function runProcessQa(options: RunProcessQaOptions): Promise<ProcessQaReport> {\n const outDir = path.resolve(\n requiredNonEmpty(options.outDir, '--out-dir', 'PROCESS_QA_OUT_DIR_REQUIRED'),\n );\n const resolvedInput = resolveReviewInput({\n rowsFile: options.rowsFile,\n runRoot: options.runRoot,\n runId: options.runId,\n outDir,\n });\n const runId = requiredNonEmpty(resolvedInput.runId, '--run-id', 'PROCESS_QA_RUN_ID_REQUIRED');\n const logicVersion = options.logicVersion?.trim() || 'v2.1';\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const env = options.env ?? process.env;\n const llmMaxProcesses =\n typeof options.llmMaxProcesses === 'number' &&\n Number.isInteger(options.llmMaxProcesses) &&\n options.llmMaxProcesses > 0\n ? options.llmMaxProcesses\n : 8;\n const processFiles = readProcessFiles(resolvedInput.effectiveProcessesDir);\n const baseRows: Array<[string, BaseInfoCheck]> = [];\n const rows: ProcessQaRow[] = [];\n const unitIssues: UnitIssue[] = [];\n const ruleFindings: ProcessQaFinding[] = [];\n const processSummariesForLlm: ProcessSummaryForLlm[] = [];\n\n let totalRaw = 0;\n let totalProduct = 0;\n let totalByproduct = 0;\n let totalWaste = 0;\n let totalEnergy = 0;\n\n processFiles.forEach((filePath) => {\n const processPayload = unwrapProcessPayload(readJsonInput(filePath), filePath);\n const exchangesValue = deepGet(processPayload, ['processDataSet', 'exchanges', 'exchange']);\n const exchanges = Array.isArray(exchangesValue)\n ? exchangesValue.filter(isRecord)\n : isRecord(exchangesValue)\n ? [exchangesValue]\n : [];\n const referenceFlowId =\n String(\n deepGet(processPayload, [\n 'processDataSet',\n 'processInformation',\n 'quantitativeReference',\n 'referenceToReferenceFlow',\n ]) ?? '',\n ).trim() || null;\n const base = baseInfoCheck(processPayload);\n const fileName = path.basename(filePath);\n baseRows.push([fileName, base]);\n ruleFindings.push(...reviewFindingsForBase(fileName, base));\n\n let rawInput = 0;\n let product = 0;\n let byproduct = 0;\n let waste = 0;\n let energyExcluded = 0;\n\n exchanges.forEach((exchange) => {\n const classified = classifyExchange(exchange, referenceFlowId);\n if (!hasNumericAmount(exchange)) {\n ruleFindings.push(\n createProcessQaFinding({\n processFile: fileName,\n severity: 'warning',\n code: 'process_missing_exchange_amount',\n message:\n 'Process exchange is missing both numeric meanAmount and resultingAmount and should be curated by Foundry.',\n evidence: {\n exchange_internal_id: String(exchange['@dataSetInternalID'] ?? ''),\n direction: String(exchange.exchangeDirection ?? ''),\n },\n }),\n );\n }\n const amount = toNumber(exchange.meanAmount ?? exchange.resultingAmount);\n if (classified.classification === 'raw_material_input') {\n rawInput += amount;\n } else if (classified.classification === 'product_output') {\n product += amount;\n } else if (classified.classification === 'byproduct_output') {\n byproduct += amount;\n } else if (classified.classification === 'waste_output') {\n waste += amount;\n } else if (classified.classification === 'energy_input') {\n energyExcluded += amount;\n }\n const currentUnitIssues = unitIssueCheck(exchange, classified.uoms, classified.blob);\n unitIssues.push(...currentUnitIssues);\n currentUnitIssues.forEach((issue) => {\n ruleFindings.push(\n createProcessQaFinding({\n processFile: fileName,\n severity: 'warning',\n code: 'process_exchange_unit_semantic_mismatch',\n message: 'Exchange unit tag conflicts with flow description semantics.',\n evidence: { ...issue },\n }),\n );\n });\n });\n\n const balanceOut = product + byproduct + waste;\n const delta = balanceOut - rawInput;\n const relativeDeviation = rawInput > 0 ? Math.abs(delta) / rawInput : null;\n\n rows.push({\n process_file: fileName,\n raw_input: rawInput,\n product,\n byproduct,\n waste,\n energy_excluded: energyExcluded,\n delta,\n relative_deviation: relativeDeviation,\n });\n\n if (relativeDeviation !== null && relativeDeviation > 0.05) {\n ruleFindings.push(\n createProcessQaFinding({\n processFile: fileName,\n severity: 'warning',\n code: 'process_material_balance_deviation',\n message:\n 'Material balance deviation exceeds the QA threshold for raw inputs versus product/by-product/waste outputs.',\n evidence: {\n raw_input: rawInput,\n product,\n byproduct,\n waste,\n relative_deviation: relativeDeviation,\n policy_decision_owner: 'foundry',\n },\n }),\n );\n }\n\n totalRaw += rawInput;\n totalProduct += product;\n totalByproduct += byproduct;\n totalWaste += waste;\n totalEnergy += energyExcluded;\n\n if (processSummariesForLlm.length < Math.max(1, llmMaxProcesses)) {\n processSummariesForLlm.push({\n process_file: fileName,\n base_names: base.base_names.slice(0, 4),\n base_checks: {\n source_name_ok: base.source_name_ok,\n functional_unit_ok: base.functional_unit_ok,\n system_boundary_ok: base.system_boundary_ok,\n time_ok: base.time_ok,\n geo_ok: base.geo_ok,\n tech_ok: base.tech_ok,\n admin_ok: base.admin_ok,\n },\n balance: {\n raw_in: rawInput,\n product,\n byproduct,\n waste,\n energy_excluded: energyExcluded,\n relative_deviation: relativeDeviation,\n },\n });\n }\n });\n\n const totals: ProcessQaTotals = {\n raw_input: totalRaw,\n product_plus_byproduct_plus_waste: totalProduct + totalByproduct + totalWaste,\n delta: totalProduct + totalByproduct + totalWaste - totalRaw,\n relative_deviation:\n totalRaw > 0\n ? Math.abs(totalProduct + totalByproduct + totalWaste - totalRaw) / totalRaw\n : null,\n energy_excluded: totalEnergy,\n };\n\n const evidenceStrong = [\n '已优先使用 quantitativeReference.referenceToReferenceFlow、EcoSpold inputGroup/outputGroup 和 exchange 标签/描述做口径过滤,仅核算 原材料投入 vs 产品+副产品+废物,能量单列不计入平衡。',\n ...(unitIssues.length > 0\n ? ['发现单位疑似错误时均附带 flow 描述与单位标签的直接矛盾证据。']\n : []),\n ];\n\n const evidenceWeak = [\n '部分 exchange 缺少结构化 type 标签,仅能依赖文本关键词分类,存在误判风险。',\n '未逐条拉取 flow 数据集参考单位做机器核对,单位结论以评论标签与流名称语义一致性为主。',\n ];\n\n const llmResult = await runOptionalLlmReview(processSummariesForLlm, {\n enableLlm: Boolean(options.enableLlm),\n llmModel: options.llmModel,\n env,\n fetchImpl,\n outDir,\n });\n const rulesetGate = processRulesetGate(ruleFindings);\n\n const summary: ProcessQaSummary = {\n run_id: runId,\n logic_version: logicVersion,\n process_count: processFiles.length,\n totals,\n ruleset_gate: rulesetGate,\n llm: llmResult,\n policy_decision_owner: 'foundry',\n qa_mode: 'deterministic_qa_report',\n };\n const reviewInputSummaryPath = writeJsonArtifact(\n path.join(outDir, 'qa-input-summary.json'),\n resolvedInput.reviewInputSummary,\n );\n const ruleFindingsPath = writeJsonLinesArtifact(\n path.join(outDir, 'process-qa-rule-findings.jsonl'),\n ruleFindings,\n );\n const rulesetGatePath = writeJsonArtifact(\n path.join(outDir, 'process-qa-ruleset-gate.json'),\n rulesetGate,\n );\n\n const reviewZhPath = writeTextArtifact(\n path.join(outDir, 'one_flow_rerun_qa_v2_1_zh.md'),\n renderZhReview({\n runId,\n logicVersion,\n baseRows,\n rows,\n totals,\n llmResult,\n evidenceStrong,\n evidenceWeak,\n }),\n );\n const reviewEnPath = writeTextArtifact(\n path.join(outDir, 'one_flow_rerun_qa_v2_1_en.md'),\n renderEnReview({\n runId,\n logicVersion,\n baseRows,\n rows,\n totals,\n evidenceStrong,\n evidenceWeak,\n }),\n );\n const timingPath = writeTextArtifact(\n path.join(outDir, 'one_flow_rerun_timing.md'),\n renderTiming({\n runId,\n startTs: options.startTs,\n endTs: options.endTs,\n processCount: processFiles.length,\n }),\n );\n const unitIssuePath = writeTextArtifact(\n path.join(outDir, 'flow_unit_issue_log.md'),\n renderUnitIssues(runId, unitIssues),\n );\n const summaryPath = writeJsonArtifact(path.join(outDir, 'qa_summary_v2_1.json'), summary);\n\n const report: ProcessQaReport = {\n schema_version: 1,\n generated_at_utc: (options.now ?? (() => new Date()))().toISOString(),\n status: 'completed_local_process_qa',\n run_id: runId,\n run_root: resolvedInput.runRoot,\n rows_file: resolvedInput.rowsFile,\n out_dir: outDir,\n input_mode: resolvedInput.inputMode,\n effective_processes_dir: resolvedInput.effectiveProcessesDir,\n logic_version: logicVersion,\n ruleset_id: rulesetGate.ruleset_id,\n ruleset_version: rulesetGate.ruleset_version,\n ruleset_source_version: rulesetGate.ruleset_source_version,\n ruleset_rule_ids: rulesetGate.ruleset_rule_ids,\n process_count: processFiles.length,\n totals,\n rule_finding_count: ruleFindings.length,\n blocker_count: rulesetGate.counts.blockers,\n ruleset_gate: rulesetGate,\n policy_decision_owner: 'foundry',\n qa_mode: 'deterministic_qa_report',\n files: {\n qa_input_summary: reviewInputSummaryPath,\n materialization_summary: resolvedInput.materializationSummaryPath,\n rule_findings: ruleFindingsPath,\n ruleset_gate: rulesetGatePath,\n qa_zh: reviewZhPath,\n qa_en: reviewEnPath,\n timing: timingPath,\n unit_issue_log: unitIssuePath,\n summary: summaryPath,\n report: '',\n },\n llm: llmResult,\n };\n\n const reportPath = writeJsonArtifact(path.join(outDir, 'process-qa-report.json'), report);\n report.files.report = reportPath;\n writeJsonArtifact(reportPath, report);\n return report;\n}\n\nexport const __testInternals = {\n requiredNonEmpty,\n textFromValue,\n toNumber,\n deepGet,\n hasNonEmpty,\n extractBaseNames,\n classifyExchange,\n unitIssueCheck,\n hasNumericAmount,\n createProcessQaFinding,\n reviewFindingsForBase,\n processRulesetGate,\n baseInfoCheck,\n unwrapProcessPayload,\n buildPrompt,\n parseLlmJsonOutput,\n runOptionalLlmReview,\n renderZhReview,\n renderEnReview,\n renderTiming,\n renderUnitIssues,\n};\n"]}
@@ -6,6 +6,7 @@ const ANNUAL_SUPPLY_FIELD = 'processDataSet.modellingAndValidation.dataSourcesTr
6
6
  const ANNUAL_SUPPLY_ROOT_FIELD = 'modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';
7
7
  const NUMERIC_TEXT_WITH_SUFFIX_PATTERN = /^[+-]?(\d+(\.\d*)?|\.\d+)([Ee][+-]?\d+)?\s+\S.*$/u;
8
8
  const ANNUAL_PERIOD_PATTERN = /(?:\/\s*(?:year|yr|a)\b|\bper\s+(?:year|annum)\b|\/\s*年|每年|年度|年供应|年产)/iu;
9
+ const ANNUAL_UNAVAILABLE_PATTERN = /\b(?:source\s+)?(?:production\s+)?volume\s+(?:unavailable|unknown|not\s+available)\b/iu;
9
10
  const CJK_TEXT_PATTERN = /[\p{Script=Han}]/u;
10
11
  const NET_CALORIFIC_VALUE_ID = '93a60a56-a3c8-11da-a746-0800200c9a66';
11
12
  const DEFAULT_COMPLIANCE_SYSTEM = {
@@ -78,7 +79,9 @@ function isValidAnnualSupplyVolume(value) {
78
79
  return (items.length > 0 &&
79
80
  items.every((item) => {
80
81
  const text = item['#text'].trim();
81
- return NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) && ANNUAL_PERIOD_PATTERN.test(text);
82
+ return (!ANNUAL_UNAVAILABLE_PATTERN.test(text) &&
83
+ NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) &&
84
+ ANNUAL_PERIOD_PATTERN.test(text));
82
85
  }));
83
86
  }
84
87
  function isValidReview(value) {
@@ -145,6 +148,16 @@ export function collectProcessRequiredFieldIssues(payload) {
145
148
  },
146
149
  ];
147
150
  }
151
+ if (items.some((item) => ANNUAL_UNAVAILABLE_PATTERN.test(item['#text'].trim()))) {
152
+ return [
153
+ ...issues,
154
+ {
155
+ code: 'annual_supply_or_production_volume_missing',
156
+ message: 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',
157
+ path: ANNUAL_SUPPLY_FIELD,
158
+ },
159
+ ];
160
+ }
148
161
  if (items.every((item) => NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(item['#text'].trim())) &&
149
162
  items.some((item) => !ANNUAL_PERIOD_PATTERN.test(item['#text'].trim()))) {
150
163
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"process-required-fields.js","sourceRoot":"","sources":["../../../src/lib/process-required-fields.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n cloneJson,\n datasetRoot,\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nconst ANNUAL_SUPPLY_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst ANNUAL_SUPPLY_ROOT_FIELD =\n 'modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst NUMERIC_TEXT_WITH_SUFFIX_PATTERN = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([Ee][+-]?\\d+)?\\s+\\S.*$/u;\nconst ANNUAL_PERIOD_PATTERN =\n /(?:\\/\\s*(?:year|yr|a)\\b|\\bper\\s+(?:year|annum)\\b|\\/\\s*年|每年|年度|年供应|年产)/iu;\nconst CJK_TEXT_PATTERN = /[\\p{Script=Han}]/u;\nconst NET_CALORIFIC_VALUE_ID = '93a60a56-a3c8-11da-a746-0800200c9a66';\nconst DEFAULT_COMPLIANCE_SYSTEM = {\n '@refObjectId': 'c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@type': 'source data set',\n '@uri': 'https://tiangong.earth/datasets/c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@version': '00.00.001',\n 'common:shortDescription': {\n '@xml:lang': 'en',\n '#text': 'Environmental Footprint (EF) 3.1',\n },\n} as const;\nconst DEFAULT_COMPLIANCE_DECLARATION = {\n 'common:referenceToComplianceSystem': DEFAULT_COMPLIANCE_SYSTEM,\n 'common:approvalOfOverallCompliance': 'Not defined',\n 'common:nomenclatureCompliance': 'Not defined',\n 'common:methodologicalCompliance': 'Not defined',\n 'common:reviewCompliance': 'Not defined',\n 'common:documentationCompliance': 'Not defined',\n 'common:qualityCompliance': 'Not defined',\n} as const;\nconst REQUIRED_COMPLIANCE_FIELDS = [\n 'common:approvalOfOverallCompliance',\n 'common:nomenclatureCompliance',\n 'common:methodologicalCompliance',\n 'common:reviewCompliance',\n 'common:documentationCompliance',\n 'common:qualityCompliance',\n] as const;\n\ntype AnnualSupplyStatus = 'existing' | 'completed' | 'blocked' | 'skipped';\n\nexport type ProcessRequiredFieldIssue = {\n code: string;\n message: string;\n path: string;\n};\n\nexport type ProcessRequiredFieldCompletion = {\n field_path: string;\n source: 'existing' | 'evidence' | 'placeholder_repair' | 'required_structure_repair';\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string | null;\n unit: string | null;\n reference_exchange_internal_id: string | null;\n basis: string;\n};\n\nexport type ProcessRequiredFieldsRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: string | null;\n status: AnnualSupplyStatus;\n issues: ProcessRequiredFieldIssue[];\n completions: ProcessRequiredFieldCompletion[];\n};\n\nexport type ProcessRequiredFieldsReport = {\n generated_at_utc: string;\n input_path: string;\n out_path: string;\n out_dir: string | null;\n status: 'completed' | 'completed_with_blockers';\n default_unit: string;\n counts: {\n total: number;\n processes: number;\n completed: number;\n existing: number;\n blocked: number;\n skipped: number;\n };\n files: {\n output_rows: string;\n report: string | null;\n evidence: string | null;\n };\n rows: ProcessRequiredFieldsRowReport[];\n};\n\nexport type RunProcessRequiredFieldsCompleteOptions = {\n inputPath: string;\n outPath: string;\n outDir?: string | null;\n defaultUnit?: string | null;\n flowInputPath?: string | null;\n rawInput?: unknown;\n rawFlowInput?: unknown;\n now?: Date;\n};\n\ntype CompletionContext = {\n defaultUnit: string;\n flowUnitById?: Map<string, string>;\n};\n\ntype AnnualSupplyEvidenceValue = {\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string;\n unit: string;\n basis: string;\n};\n\nfunction normalizeUnit(value: string | null | undefined): string {\n const token = value?.trim();\n return token || 'unit';\n}\n\nfunction sourceLanguageForText(value: string, fallback = 'en'): string {\n return CJK_TEXT_PATTERN.test(value) ? 'zh' : fallback;\n}\n\nfunction textValue(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction asList(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n return value === undefined || value === null ? [] : [value];\n}\n\nfunction valueAtPath(root: unknown, pathExpression: string): unknown {\n let current = root;\n for (const segment of pathExpression.split('.')) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction annualSupplyItems(value: unknown): Array<{ '#text': string; '@xml:lang': string }> {\n return asList(value).filter((item): item is { '#text': string; '@xml:lang': string } => {\n return (\n isRecord(item) && typeof item['#text'] === 'string' && typeof item['@xml:lang'] === 'string'\n );\n });\n}\n\nfunction isValidAnnualSupplyVolume(value: unknown): boolean {\n const items = annualSupplyItems(value);\n return (\n items.length > 0 &&\n items.every((item) => {\n const text = item['#text'].trim();\n return NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) && ANNUAL_PERIOD_PATTERN.test(text);\n })\n );\n}\n\nfunction isValidReview(value: unknown): boolean {\n return asList(value).some((item) => isRecord(item) && Boolean(firstNonEmpty(item['@type'])));\n}\n\nfunction isValidComplianceDeclaration(value: unknown): boolean {\n return asList(value).some((item) => {\n if (!isRecord(item)) {\n return false;\n }\n const complianceSystem = isRecord(item['common:referenceToComplianceSystem'])\n ? item['common:referenceToComplianceSystem']\n : {};\n return (\n Boolean(firstNonEmpty(complianceSystem['@refObjectId'])) &&\n REQUIRED_COMPLIANCE_FIELDS.every((field) => Boolean(firstNonEmpty(item[field])))\n );\n });\n}\n\nexport function collectProcessRequiredFieldIssues(\n payload: JsonObject,\n): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const dataSources = isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)\n ? modelling.dataSourcesTreatmentAndRepresentativeness\n : null;\n if (!dataSources) {\n return [\n {\n code: 'process_data_sources_treatment_missing',\n message: 'Process payload must include dataSourcesTreatmentAndRepresentativeness.',\n path: 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness',\n },\n ];\n }\n\n const issues: ProcessRequiredFieldIssue[] = [];\n const validation = isRecord(modelling.validation) ? modelling.validation : {};\n if (!isValidReview(validation.review)) {\n issues.push({\n code: 'process_validation_review_missing',\n message: 'Process payload must include modellingAndValidation.validation.review.',\n path: 'processDataSet.modellingAndValidation.validation.review',\n });\n }\n\n const complianceDeclarations = isRecord(modelling.complianceDeclarations)\n ? modelling.complianceDeclarations\n : {};\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n issues.push({\n code: 'process_compliance_declaration_missing',\n message:\n 'Process payload must include modellingAndValidation.complianceDeclarations.compliance.',\n path: 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n });\n }\n\n const annualSupply = dataSources.annualSupplyOrProductionVolume;\n if (isValidAnnualSupplyVolume(annualSupply)) {\n return issues;\n }\n\n const items = annualSupplyItems(annualSupply);\n if (items.length === 0) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (\n items.every((item) => NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(item['#text'].trim())) &&\n items.some((item) => !ANNUAL_PERIOD_PATTERN.test(item['#text'].trim()))\n ) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_not_annualized',\n message:\n 'annualSupplyOrProductionVolume must express an annualized amount such as \"3.6 MJ/year\" or \"3.6 MJ/年\", not a reference-flow description.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_invalid',\n message:\n 'annualSupplyOrProductionVolume must start with a real number followed by a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n}\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectPlaceholderIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: ProcessRequiredFieldIssue[],\n): void {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (\n (pathSegments.at(-1) === 'common:referenceYear' && normalized === '9999') ||\n normalized.includes('tidas_import_placeholder') ||\n normalized.includes('tidas_import_trace_v1') ||\n normalized.includes('not declared in source package') ||\n normalized.includes('source package metadata not declared') ||\n normalized === '<null>' ||\n /(^|[\\s\"'`])(?:\\/users\\/|\\/home\\/|[a-z]:\\\\)/iu.test(value) ||\n normalized.includes('placeholder.example') ||\n normalized.includes('pending confirmation') ||\n /00000000-0000-0000-0000-0000000000[0-9a-f]{2}/u.test(normalized)\n ) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectPlaceholderIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectPlaceholderIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nexport function collectProcessPlaceholderIssues(payload: JsonObject): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(root, ['processDataSet'], issues);\n return issues;\n}\n\nfunction hasPlaceholderContent(value: unknown): boolean {\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(value, [], issues);\n return issues.length > 0;\n}\n\nfunction removePlaceholderField(\n parent: JsonObject,\n key: string,\n fieldPath: string,\n completions: ProcessRequiredFieldCompletion[],\n): void {\n if (!hasPlaceholderContent(parent[key])) {\n return;\n }\n delete parent[key];\n completions.push({\n field_path: fieldPath,\n source: 'placeholder_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis:\n 'Removed placeholder review metadata because the dataset is marked Not reviewed and no completed review evidence is present.',\n });\n}\n\nfunction repairPlaceholderReviewMetadata(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const validation = isRecord(modelling.validation) ? modelling.validation : null;\n if (!validation) {\n return [];\n }\n\n const completions: ProcessRequiredFieldCompletion[] = [];\n const validationPath = 'processDataSet.modellingAndValidation.validation';\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation, key, `${validationPath}.${key}`, completions);\n }\n\n if (isRecord(validation.review)) {\n const reviewPath = `${validationPath}.review`;\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation.review, key, `${reviewPath}.${key}`, completions);\n }\n }\n\n return completions;\n}\n\nfunction addRequiredStructureCompletion(\n completions: ProcessRequiredFieldCompletion[],\n fieldPath: string,\n basis: string,\n): void {\n completions.push({\n field_path: fieldPath,\n source: 'required_structure_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis,\n });\n}\n\nfunction repairRequiredProcessStructures(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const completions: ProcessRequiredFieldCompletion[] = [];\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n\n if (!isRecord(modelling.validation)) {\n modelling.validation = {};\n }\n const validation = modelling.validation as JsonObject;\n if (!isValidReview(validation.review)) {\n validation.review = {\n '@type': 'Not reviewed',\n };\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.validation.review',\n 'Inserted a conservative Not reviewed marker because UI roundtrip or source data omitted the required validation.review structure.',\n );\n }\n\n if (!isRecord(modelling.complianceDeclarations)) {\n modelling.complianceDeclarations = {};\n }\n const complianceDeclarations = modelling.complianceDeclarations as JsonObject;\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n complianceDeclarations.compliance = cloneJson(DEFAULT_COMPLIANCE_DECLARATION);\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n 'Inserted a conservative Not defined compliance declaration against EF 3.1 because UI roundtrip or source data omitted the required compliance structure.',\n );\n }\n\n return completions;\n}\n\nfunction processRootForMutation(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n return payload;\n}\n\nfunction selectReferenceExchange(root: JsonObject): JsonObject | null {\n const exchangesRoot = isRecord(root.exchanges) ? root.exchanges : {};\n const exchanges = asList(exchangesRoot.exchange).filter(isRecord);\n const processInfo = isRecord(root.processInformation) ? root.processInformation : {};\n const quantitativeReference = isRecord(processInfo.quantitativeReference)\n ? processInfo.quantitativeReference\n : {};\n const referenceId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n\n const byReferenceId = referenceId\n ? exchanges.find((exchange) => firstNonEmpty(exchange['@dataSetInternalID']) === referenceId)\n : null;\n if (byReferenceId) {\n return byReferenceId;\n }\n\n return (\n exchanges.find((exchange) => exchange.quantitativeReference === true) ??\n exchanges.find(\n (exchange) => String(exchange.exchangeDirection ?? '').toLowerCase() === 'output',\n ) ??\n null\n );\n}\n\nfunction localizedTextIncludes(value: unknown, pattern: RegExp): boolean {\n return annualSupplyItems(value).some((item) => pattern.test(item['#text']));\n}\n\nfunction inferSpecificUnitFromFlowPayload(payload: JsonObject): string | null {\n const root = datasetRoot(payload, 'flow');\n const flowPropertiesRoot = isRecord(root.flowProperties) ? root.flowProperties : {};\n const flowProperties = asList(flowPropertiesRoot.flowProperty).filter(isRecord);\n for (const flowProperty of flowProperties) {\n const direct = firstNonEmpty(\n flowProperty.unit,\n flowProperty.referenceUnit,\n flowProperty.flowUnit,\n );\n if (direct) {\n return direct;\n }\n\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n }\n\n const flowInformation = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const classificationInformation = isRecord(dataSetInformation.classificationInformation)\n ? dataSetInformation.classificationInformation\n : {};\n const classification = isRecord(classificationInformation['common:classification'])\n ? classificationInformation['common:classification']\n : {};\n const classificationClasses = classification['common:class'];\n if (\n localizedTextIncludes(classificationClasses, /Electrical energy|electricity|交流电|电力|电能/iu)\n ) {\n return 'MJ';\n }\n\n return null;\n}\n\nfunction buildFlowUnitIndex(\n flowRows: DatasetRowInput[],\n fallbackUnit: string,\n): Map<string, string> {\n const index = new Map<string, string>();\n for (const row of flowRows) {\n if (row.kind !== 'flow' || !row.id) {\n continue;\n }\n const inferred = inferSpecificUnitFromFlowPayload(row.payload);\n if (inferred && inferred !== fallbackUnit) {\n index.set(row.id, inferred);\n }\n }\n return index;\n}\n\nfunction inferUnitFromReferenceExchange(\n exchange: JsonObject,\n fallbackOrContext: string | CompletionContext,\n): string {\n const context =\n typeof fallbackOrContext === 'string' ? { defaultUnit: fallbackOrContext } : fallbackOrContext;\n const fallbackUnit = context.defaultUnit;\n const flowRef = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const refObjectId = firstNonEmpty(flowRef['@refObjectId']);\n if (refObjectId) {\n const indexedUnit = context.flowUnitById?.get(refObjectId);\n if (indexedUnit) {\n return indexedUnit;\n }\n }\n\n const direct = firstNonEmpty(exchange.unit, exchange.referenceUnit, exchange.flowUnit);\n if (direct) {\n return direct;\n }\n\n const shortDescriptions = flowRef['common:shortDescription'];\n if (\n localizedTextIncludes(\n shortDescriptions,\n /MJ|net calorific|lower calorific|Electrical energy|electricity|净热值|低位发热|交流电|电力|电能/iu,\n )\n ) {\n return 'MJ';\n }\n\n const flowProperty = isRecord(exchange.flowProperty) ? exchange.flowProperty : {};\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n refObjectId === NET_CALORIFIC_VALUE_ID ||\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n\n return fallbackUnit;\n}\n\nfunction buildAnnualSupplyValue(\n amount: string,\n unit: string,\n): Array<{\n '#text': string;\n '@xml:lang': string;\n}> {\n return [{ '@xml:lang': 'en', '#text': `${amount} ${unit}/year` }];\n}\n\nfunction annualSupplyTextParts(value: string): { amount: string; unit: string } | null {\n const match = /^\\s*([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)\\s+(\\S.*)$/u.exec(value);\n return match ? { amount: match[1] as string, unit: (match[2] as string).trim() } : null;\n}\n\nfunction annualSupplyValueFromText(value: string): AnnualSupplyEvidenceValue | null {\n const text = value.trim();\n if (!NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) || !ANNUAL_PERIOD_PATTERN.test(text)) {\n return null;\n }\n const parts = annualSupplyTextParts(text) as { amount: string; unit: string };\n return {\n value: [{ '@xml:lang': sourceLanguageForText(text), '#text': text }],\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a complete annual supply / production volume text value.',\n };\n}\n\nfunction normalizeAnnualSupplyEvidenceValue(\n candidate: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (typeof candidate === 'string') {\n return annualSupplyValueFromText(candidate);\n }\n\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n const amount = String(candidate);\n return {\n value: buildAnnualSupplyValue(amount, context.defaultUnit),\n amount,\n unit: context.defaultUnit,\n basis:\n 'Evidence provided a numeric annual supply / production volume; the configured default unit was applied.',\n };\n }\n\n if (isValidAnnualSupplyVolume(candidate)) {\n const value = [\n annualSupplyItems(candidate).map((item) => ({\n '@xml:lang': item['@xml:lang'],\n '#text': item['#text'].trim(),\n }))[0]!,\n ];\n const parts = annualSupplyTextParts(value[0]!['#text']) as { amount: string; unit: string };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis:\n 'Evidence provided a validated source-language annual supply / production volume value.',\n };\n }\n\n if (!isRecord(candidate)) {\n return null;\n }\n\n for (const key of [\n 'value',\n 'text',\n 'value_text',\n 'valueText',\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n ]) {\n const nested = normalizeAnnualSupplyEvidenceValue(candidate[key], context);\n if (nested) {\n return nested;\n }\n }\n\n const preferredLanguage = textValue(\n candidate.source_language ??\n candidate.sourceLanguage ??\n candidate.lang ??\n candidate['@xml:lang'],\n )?.toLowerCase();\n const english = textValue(candidate.en ?? candidate.english);\n const chinese = textValue(candidate.zh ?? candidate.chinese ?? candidate['zh-CN']);\n const localized = [\n english ? { '@xml:lang': 'en', '#text': english } : null,\n chinese ? { '@xml:lang': 'zh', '#text': chinese } : null,\n ].filter((item): item is { '#text': string; '@xml:lang': string } => Boolean(item));\n if (localized.length > 0 && isValidAnnualSupplyVolume(localized)) {\n const selected =\n localized.find((item) => item['@xml:lang'].toLowerCase() === preferredLanguage) ??\n localized[0]!;\n const value = [selected];\n const parts = annualSupplyTextParts(selected['#text']) as {\n amount: string;\n unit: string;\n };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a language-specific annual supply / production volume text value.',\n };\n }\n\n const amount = textValue(candidate.amount ?? candidate.value_amount ?? candidate.valueAmount);\n const unit = normalizeUnit(\n textValue(\n candidate.unit ?? candidate.uom ?? candidate.reference_unit ?? candidate.referenceUnit,\n ) ?? context.defaultUnit,\n );\n if (amount) {\n return {\n value: buildAnnualSupplyValue(amount, unit),\n amount,\n unit,\n basis:\n 'Evidence provided annual supply / production volume amount and unit as structured fields.',\n };\n }\n\n return null;\n}\n\nfunction isAnnualSupplyEvidencePath(pathExpression: string | null): boolean {\n if (!pathExpression) {\n return false;\n }\n return (\n pathExpression === ANNUAL_SUPPLY_FIELD ||\n pathExpression === ANNUAL_SUPPLY_ROOT_FIELD ||\n pathExpression.endsWith(`.${ANNUAL_SUPPLY_ROOT_FIELD}`) ||\n pathExpression.endsWith('.annualSupplyOrProductionVolume')\n );\n}\n\nfunction fieldPathFromEvidenceEntry(entry: JsonObject): string | null {\n return firstNonEmpty(\n entry.field_path,\n entry.fieldPath,\n entry.path,\n entry.field,\n entry.target_path,\n entry.targetPath,\n );\n}\n\nfunction findAnnualSupplyEvidenceEntry(\n container: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (!isRecord(container)) {\n return null;\n }\n\n const directPath = fieldPathFromEvidenceEntry(container);\n if (isAnnualSupplyEvidencePath(directPath)) {\n const directValue = normalizeAnnualSupplyEvidenceValue(container, context);\n if (directValue) {\n return directValue;\n }\n }\n\n for (const key of [\n 'field_values',\n 'fieldValues',\n 'field_bindings',\n 'fieldBindings',\n 'bindings',\n ]) {\n const entries = asList(container[key]).filter(isRecord);\n for (const entry of entries) {\n if (!isAnnualSupplyEvidencePath(fieldPathFromEvidenceEntry(entry))) {\n continue;\n }\n const value = normalizeAnnualSupplyEvidenceValue(entry, context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction findAnnualSupplyEvidenceValue(\n row: JsonObject,\n payload: JsonObject,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n const explicitPaths = [\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n 'required_fields.annualSupplyOrProductionVolume',\n 'requiredFields.annualSupplyOrProductionVolume',\n 'authoring.required_fields.annualSupplyOrProductionVolume',\n 'authoring.requiredFields.annualSupplyOrProductionVolume',\n 'process_authoring.required_fields.annualSupplyOrProductionVolume',\n 'processAuthoring.requiredFields.annualSupplyOrProductionVolume',\n ];\n for (const source of [row, payload]) {\n for (const explicitPath of explicitPaths) {\n const value = normalizeAnnualSupplyEvidenceValue(valueAtPath(source, explicitPath), context);\n if (value) {\n return value;\n }\n }\n }\n\n const evidencePaths = [\n 'evidence_manifest',\n 'evidenceManifest',\n 'authoring_evidence',\n 'authoringEvidence',\n 'process_authoring.evidence_manifest',\n 'processAuthoring.evidenceManifest',\n ];\n for (const source of [row, payload]) {\n for (const evidencePath of evidencePaths) {\n const value = findAnnualSupplyEvidenceEntry(valueAtPath(source, evidencePath), context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction ensureDataSources(root: JsonObject): JsonObject {\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n if (!isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)) {\n modelling.dataSourcesTreatmentAndRepresentativeness = {};\n }\n return modelling.dataSourcesTreatmentAndRepresentativeness as JsonObject;\n}\n\nfunction cloneRowWithPayload(row: DatasetRowInput): { row: JsonObject; payload: JsonObject } {\n const clonedRow = cloneJson(row.row);\n if (isRecord(clonedRow.json_ordered)) {\n return { row: clonedRow, payload: clonedRow.json_ordered };\n }\n if (isRecord(clonedRow.jsonOrdered)) {\n return { row: clonedRow, payload: clonedRow.jsonOrdered };\n }\n if (isRecord(clonedRow.json)) {\n return { row: clonedRow, payload: clonedRow.json };\n }\n if (isRecord(clonedRow.payload)) {\n return { row: clonedRow, payload: clonedRow.payload };\n }\n if (isRecord(clonedRow.process)) {\n return { row: clonedRow, payload: clonedRow.process };\n }\n return { row: clonedRow, payload: clonedRow };\n}\n\nfunction completeProcessRow(\n row: DatasetRowInput,\n context: CompletionContext,\n): { row: JsonObject; report: ProcessRequiredFieldsRowReport } {\n const { row: clonedRow, payload } = cloneRowWithPayload(row);\n if (row.kind !== 'process') {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'skipped',\n issues: [],\n completions: [],\n },\n };\n }\n\n const root = processRootForMutation(payload);\n const placeholderCompletions = repairPlaceholderReviewMetadata(root);\n const requiredStructureCompletions = repairRequiredProcessStructures(root);\n const repairCompletions = [...placeholderCompletions, ...requiredStructureCompletions];\n const existingIssues = collectProcessRequiredFieldIssues(payload);\n const placeholderIssues = collectProcessPlaceholderIssues(payload);\n\n if (existingIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: repairCompletions.length > 0 ? 'completed' : 'existing',\n issues: [],\n completions: repairCompletions,\n },\n };\n }\n\n if (placeholderIssues.length > 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [...existingIssues, ...placeholderIssues],\n completions: repairCompletions,\n },\n };\n }\n\n const evidenceValue = findAnnualSupplyEvidenceValue(clonedRow, payload, context);\n if (evidenceValue) {\n const dataSources = ensureDataSources(root);\n dataSources.annualSupplyOrProductionVolume = evidenceValue.value;\n const completion: ProcessRequiredFieldCompletion = {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'evidence',\n value: evidenceValue.value,\n amount: evidenceValue.amount,\n unit: evidenceValue.unit,\n reference_exchange_internal_id: null,\n basis: evidenceValue.basis,\n };\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n }\n\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [\n ...existingIssues,\n {\n code: 'annual_supply_evidence_missing',\n message:\n 'Could not complete annualSupplyOrProductionVolume because no source evidence value was provided.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ],\n completions: repairCompletions,\n },\n };\n}\n\nfunction buildFiles(outPath: string, outDir: string | null): ProcessRequiredFieldsReport['files'] {\n if (!outDir) {\n return {\n output_rows: path.resolve(outPath),\n report: null,\n evidence: null,\n };\n }\n const resolved = path.resolve(outDir);\n return {\n output_rows: path.resolve(outPath),\n report: path.join(resolved, 'outputs', 'process-required-fields-report.json'),\n evidence: path.join(resolved, 'outputs', 'process-required-fields-evidence.jsonl'),\n };\n}\n\nfunction requireOutputPath(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new CliError('Missing required --out value.', {\n code: 'PROCESS_REQUIRED_FIELDS_OUT_REQUIRED',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nexport async function runProcessRequiredFieldsComplete(\n options: RunProcessRequiredFieldsCompleteOptions,\n): Promise<ProcessRequiredFieldsReport> {\n const outPath = requireOutputPath(options.outPath);\n const outDir = options.outDir?.trim() ? options.outDir.trim() : null;\n const defaultUnit = normalizeUnit(options.defaultUnit);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const flowRows = options.flowInputPath?.trim()\n ? materializeDatasetRows(options.flowInputPath, options.rawFlowInput)\n : [];\n const flowUnitById = buildFlowUnitIndex(flowRows, defaultUnit);\n const completed = rows.map((row) => completeProcessRow(row, { defaultUnit, flowUnitById }));\n const rowReports = completed.map((item) => item.report);\n const files = buildFiles(outPath, outDir);\n const blockers = rowReports.filter((row) => row.status === 'blocked');\n\n const report: ProcessRequiredFieldsReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n out_path: path.resolve(outPath),\n out_dir: outDir ? path.resolve(outDir) : null,\n status: blockers.length > 0 ? 'completed_with_blockers' : 'completed',\n default_unit: defaultUnit,\n counts: {\n total: rowReports.length,\n processes: rowReports.filter((row) => row.type === 'process').length,\n completed: rowReports.filter((row) => row.status === 'completed').length,\n existing: rowReports.filter((row) => row.status === 'existing').length,\n blocked: blockers.length,\n skipped: rowReports.filter((row) => row.status === 'skipped').length,\n },\n files,\n rows: rowReports,\n };\n\n writeJsonLinesArtifact(\n files.output_rows,\n completed.map((item) => item.row),\n );\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.evidence) {\n writeJsonLinesArtifact(\n files.evidence,\n rowReports.flatMap((row) =>\n row.completions.map((completion) => ({\n row_index: row.index,\n dataset_id: row.id,\n dataset_version: row.version,\n ...completion,\n })),\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ANNUAL_SUPPLY_ROOT_FIELD,\n annualSupplyTextParts,\n annualSupplyValueFromText,\n cloneRowWithPayload,\n collectProcessRequiredFieldIssues,\n completeProcessRow,\n ensureDataSources,\n fieldPathFromEvidenceEntry,\n findAnnualSupplyEvidenceValue,\n findAnnualSupplyEvidenceEntry,\n buildFlowUnitIndex,\n inferUnitFromReferenceExchange,\n inferSpecificUnitFromFlowPayload,\n issuePath,\n isAnnualSupplyEvidencePath,\n isValidComplianceDeclaration,\n isValidAnnualSupplyVolume,\n isValidReview,\n normalizeAnnualSupplyEvidenceValue,\n repairRequiredProcessStructures,\n requireOutputPath,\n selectReferenceExchange,\n textValue,\n valueAtPath,\n};\n"]}
1
+ {"version":3,"file":"process-required-fields.js","sourceRoot":"","sources":["../../../src/lib/process-required-fields.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,QAAQ,EACR,sBAAsB,GAGvB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,mBAAmB,GACvB,gHAAgH,CAAC;AACnH,MAAM,wBAAwB,GAC5B,iGAAiG,CAAC;AACpG,MAAM,gCAAgC,GAAG,mDAAmD,CAAC;AAC7F,MAAM,qBAAqB,GACzB,yEAAyE,CAAC;AAC5E,MAAM,0BAA0B,GAC9B,wFAAwF,CAAC;AAC3F,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAC7C,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AACtE,MAAM,yBAAyB,GAAG;IAChC,cAAc,EAAE,sCAAsC;IACtD,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,sEAAsE;IAC9E,UAAU,EAAE,WAAW;IACvB,yBAAyB,EAAE;QACzB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,kCAAkC;KAC5C;CACO,CAAC;AACX,MAAM,8BAA8B,GAAG;IACrC,oCAAoC,EAAE,yBAAyB;IAC/D,oCAAoC,EAAE,aAAa;IACnD,+BAA+B,EAAE,aAAa;IAC9C,iCAAiC,EAAE,aAAa;IAChD,yBAAyB,EAAE,aAAa;IACxC,gCAAgC,EAAE,aAAa;IAC/C,0BAA0B,EAAE,aAAa;CACjC,CAAC;AACX,MAAM,0BAA0B,GAAG;IACjC,oCAAoC;IACpC,+BAA+B;IAC/B,iCAAiC;IACjC,yBAAyB;IACzB,gCAAgC;IAChC,0BAA0B;CAClB,CAAC;AA4EX,SAAS,aAAa,CAAC,KAAgC;IACrD,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5B,OAAO,KAAK,IAAI,MAAM,CAAC;AACzB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa,EAAE,QAAQ,GAAG,IAAI;IAC3D,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,OAAO,IAAI,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,WAAW,CAAC,IAAa,EAAE,cAAsB;IACxD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAoD,EAAE;QACrF,OAAO,CACL,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,CAC7F,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,CACL,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CACL,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3C,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC3E,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CACL,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;YACxD,0BAA0B,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACjF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,OAAmB;IAEnB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,yCAAyC,CAAC;QAC/E,CAAC,CAAC,SAAS,CAAC,yCAAyC;QACrD,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL;gBACE,IAAI,EAAE,wCAAwC;gBAC9C,OAAO,EAAE,yEAAyE;gBAClF,IAAI,EAAE,iFAAiF;aACxF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mCAAmC;YACzC,OAAO,EAAE,wEAAwE;YACjF,IAAI,EAAE,yDAAyD;SAChE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,sBAAsB,GAAG,QAAQ,CAAC,SAAS,CAAC,sBAAsB,CAAC;QACvE,CAAC,CAAC,SAAS,CAAC,sBAAsB;QAClC,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,wCAAwC;YAC9C,OAAO,EACL,wFAAwF;YAC1F,IAAI,EAAE,yEAAyE;SAChF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,8BAA8B,CAAC;IAChE,IAAI,yBAAyB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,GAAG,MAAM;YACT;gBACE,IAAI,EAAE,4CAA4C;gBAClD,OAAO,EACL,4GAA4G;gBAC9G,IAAI,EAAE,mBAAmB;aAC1B;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO;YACL,GAAG,MAAM;YACT;gBACE,IAAI,EAAE,4CAA4C;gBAClD,OAAO,EACL,4GAA4G;gBAC9G,IAAI,EAAE,mBAAmB;aAC1B;SACF,CAAC;IACJ,CAAC;IAED,IACE,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EACvE,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT;gBACE,IAAI,EAAE,mDAAmD;gBACzD,OAAO,EACL,yIAAyI;gBAC3I,IAAI,EAAE,mBAAmB;aAC1B;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT;YACE,IAAI,EAAE,4CAA4C;YAClD,OAAO,EACL,oGAAoG;YACtG,IAAI,EAAE,mBAAmB;SAC1B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,YAAoC;IACrD,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjF,CAAC;AAED,SAAS,iCAAiC,CACxC,KAAc,EACd,YAAoC,EACpC,MAAmC;IAEnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,IACE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,sBAAsB,IAAI,UAAU,KAAK,MAAM,CAAC;YACzE,UAAU,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC/C,UAAU,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC5C,UAAU,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACrD,UAAU,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC3D,UAAU,KAAK,QAAQ;YACvB,8CAA8C,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1D,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAC1C,UAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC3C,gDAAgD,CAAC,IAAI,CAAC,UAAU,CAAC,EACjE,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EACL,oHAAoH;gBACtH,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,sBAAsB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EACL,oHAAoH;gBACtH,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC5B,iCAAiC,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAC1E,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,iCAAiC,CAAC,KAAK,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,OAAmB;IACjE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,iCAAiC,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,iCAAiC,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,WAA6C;IAE7C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACnB,WAAW,CAAC,IAAI,CAAC;QACf,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,oBAAoB;QAC5B,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,8BAA8B,EAAE,IAAI;QACpC,KAAK,EACH,6HAA6H;KAChI,CAAC,CAAC;AACL,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAgB;IACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAqC,EAAE,CAAC;IACzD,MAAM,cAAc,GAAG,kDAAkD,CAAC;IAC1E,KAAK,MAAM,GAAG,IAAI;QAChB,eAAe;QACf,sBAAsB;QACtB,wCAAwC;QACxC,gDAAgD;KACjD,EAAE,CAAC;QACF,sBAAsB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,cAAc,IAAI,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,GAAG,cAAc,SAAS,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI;YAChB,eAAe;YACf,sBAAsB;YACtB,wCAAwC;YACxC,gDAAgD;SACjD,EAAE,CAAC;YACF,sBAAsB,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,IAAI,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,8BAA8B,CACrC,WAA6C,EAC7C,SAAiB,EACjB,KAAa;IAEb,WAAW,CAAC,IAAI,CAAC;QACf,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,2BAA2B;QACnC,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,8BAA8B,EAAE,IAAI;QACpC,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAgB;IACvD,MAAM,WAAW,GAAqC,EAAE,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAoC,CAAC;IAE5D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAwB,CAAC;IACtD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,UAAU,CAAC,MAAM,GAAG;YAClB,OAAO,EAAE,cAAc;SACxB,CAAC;QACF,8BAA8B,CAC5B,WAAW,EACX,yDAAyD,EACzD,mIAAmI,CACpI,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAChD,SAAS,CAAC,sBAAsB,GAAG,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,sBAAsB,GAAG,SAAS,CAAC,sBAAoC,CAAC;IAC9E,IAAI,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,sBAAsB,CAAC,UAAU,GAAG,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC9E,8BAA8B,CAC5B,WAAW,EACX,yEAAyE,EACzE,0JAA0J,CAC3J,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAmB;IACjD,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,OAAO,CAAC,cAAc,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAgB;IAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,MAAM,qBAAqB,GAAG,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC;QACvE,CAAC,CAAC,WAAW,CAAC,qBAAqB;QACnC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,aAAa,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,CAAC;IAElF,MAAM,aAAa,GAAG,WAAW;QAC/B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,KAAK,WAAW,CAAC;QAC7F,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,CACL,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,qBAAqB,KAAK,IAAI,CAAC;QACrE,SAAS,CAAC,IAAI,CACZ,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CAClF;QACD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,OAAe;IAC5D,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gCAAgC,CAAC,OAAmB;IAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,MAAM,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChF,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,aAAa,CAC1B,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,aAAa,EAC1B,YAAY,CAAC,QAAQ,CACtB,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC,8BAA8B,CAAC;YAC3E,CAAC,CAAC,YAAY,CAAC,8BAA8B;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,cAAc,GAAG,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,eAAe,CAAC,yBAAyB,CAAC,CAAC;QACpE,IACE,cAAc,KAAK,sBAAsB;YACzC,qBAAqB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,EAC7D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CAAC;QACrE,CAAC,CAAC,eAAe,CAAC,kBAAkB;QACpC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,yBAAyB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,yBAAyB,CAAC;QACtF,CAAC,CAAC,kBAAkB,CAAC,yBAAyB;QAC9C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,cAAc,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;QACjF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,qBAAqB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7D,IACE,qBAAqB,CAAC,qBAAqB,EAAE,2CAA2C,CAAC,EACzF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CACzB,QAA2B,EAC3B,YAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACnC,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,gCAAgC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,8BAA8B,CACrC,QAAoB,EACpB,iBAA6C;IAE7C,MAAM,OAAO,GACX,OAAO,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACjG,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC7D,IACE,qBAAqB,CACnB,iBAAiB,EACjB,qFAAqF,CACtF,EACD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC,8BAA8B,CAAC;QAC3E,CAAC,CAAC,YAAY,CAAC,8BAA8B;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,cAAc,GAAG,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,eAAe,CAAC,yBAAyB,CAAC,CAAC;IACpE,IACE,WAAW,KAAK,sBAAsB;QACtC,cAAc,KAAK,sBAAsB;QACzC,qBAAqB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,EAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAc,EACd,IAAY;IAKZ,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,KAAK,GAAG,gEAAgE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3F,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAW,EAAE,IAAI,EAAG,KAAK,CAAC,CAAC,CAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1F,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAqC,CAAC;IAC9E,OAAO;QACL,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpE,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,4EAA4E;KACpF,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,SAAkB,EAClB,OAA0B;IAE1B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO;YACL,KAAK,EAAE,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;YAC1D,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,WAAW;YACzB,KAAK,EACH,yGAAyG;SAC5G,CAAC;IACJ,CAAC;IAED,IAAI,yBAAyB,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG;YACZ,iBAAiB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC9B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;aAC9B,CAAC,CAAC,CAAC,CAAC,CAAE;SACR,CAAC;QACF,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAqC,CAAC;QAC5F,OAAO;YACL,KAAK;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EACH,wFAAwF;SAC3F,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,GAAG,IAAI;QAChB,OAAO;QACP,MAAM;QACN,YAAY;QACZ,WAAW;QACX,gCAAgC;QAChC,oCAAoC;KACrC,EAAE,CAAC;QACF,MAAM,MAAM,GAAG,kCAAkC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,SAAS,CACjC,SAAS,CAAC,eAAe;QACvB,SAAS,CAAC,cAAc;QACxB,SAAS,CAAC,IAAI;QACd,SAAS,CAAC,WAAW,CAAC,CACzB,EAAE,WAAW,EAAE,CAAC;IACjB,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG;QAChB,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;QACxD,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;KACzD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAoD,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,yBAAyB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjE,MAAM,QAAQ,GACZ,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC;YAC/E,SAAS,CAAC,CAAC,CAAE,CAAC;QAChB,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAGpD,CAAC;QACF,OAAO;YACL,KAAK;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,qFAAqF;SAC7F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,aAAa,CACxB,SAAS,CACP,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,aAAa,CACvF,IAAI,OAAO,CAAC,WAAW,CACzB,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,KAAK,EAAE,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC;YAC3C,MAAM;YACN,IAAI;YACJ,KAAK,EACH,2FAA2F;SAC9F,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,0BAA0B,CAAC,cAA6B;IAC/D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,cAAc,KAAK,mBAAmB;QACtC,cAAc,KAAK,wBAAwB;QAC3C,cAAc,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC;QACvD,cAAc,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAiB;IACnD,OAAO,aAAa,CAClB,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,UAAU,CACjB,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,SAAkB,EAClB,OAA0B;IAE1B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,0BAA0B,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,kCAAkC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI;QAChB,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,eAAe;QACf,UAAU;KACX,EAAE,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACnE,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,kCAAkC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACjE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CACpC,GAAe,EACf,OAAmB,EACnB,OAA0B;IAE1B,MAAM,aAAa,GAAG;QACpB,gCAAgC;QAChC,oCAAoC;QACpC,gDAAgD;QAChD,+CAA+C;QAC/C,0DAA0D;QAC1D,yDAAyD;QACzD,kEAAkE;QAClE,gEAAgE;KACjE,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,kCAAkC,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7F,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG;QACpB,mBAAmB;QACnB,kBAAkB;QAClB,oBAAoB;QACpB,mBAAmB;QACnB,qCAAqC;QACrC,mCAAmC;KACpC,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,6BAA6B,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;YACxF,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAgB;IACzC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAoC,CAAC;IAC5D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,yCAAyC,CAAC,EAAE,CAAC;QACnE,SAAS,CAAC,yCAAyC,GAAG,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,SAAS,CAAC,yCAAuD,CAAC;AAC3E,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAoB;IAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAoB,EACpB,OAA0B;IAE1B,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO;YACL,GAAG,EAAE,SAAS;YACd,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;gBACV,WAAW,EAAE,EAAE;aAChB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,sBAAsB,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,4BAA4B,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,iBAAiB,GAAG,CAAC,GAAG,sBAAsB,EAAE,GAAG,4BAA4B,CAAC,CAAC;IACvF,MAAM,cAAc,GAAG,iCAAiC,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,iBAAiB,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAEnE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO;YACL,GAAG,EAAE,SAAS;YACd,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;gBAC/D,MAAM,EAAE,EAAE;gBACV,WAAW,EAAE,iBAAiB;aAC/B;SACF,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,GAAG,EAAE,SAAS;YACd,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,CAAC,GAAG,cAAc,EAAE,GAAG,iBAAiB,CAAC;gBACjD,WAAW,EAAE,iBAAiB;aAC/B;SACF,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,6BAA6B,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,WAAW,CAAC,8BAA8B,GAAG,aAAa,CAAC,KAAK,CAAC;QACjE,MAAM,UAAU,GAAmC;YACjD,UAAU,EAAE,mBAAmB;YAC/B,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,8BAA8B,EAAE,IAAI;YACpC,KAAK,EAAE,aAAa,CAAC,KAAK;SAC3B,CAAC;QACF,OAAO;YACL,GAAG,EAAE,SAAS;YACd,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,EAAE;gBACV,WAAW,EAAE,CAAC,GAAG,iBAAiB,EAAE,UAAU,CAAC;aAChD;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,EAAE,SAAS;QACd,MAAM,EAAE;YACN,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE;gBACN,GAAG,cAAc;gBACjB;oBACE,IAAI,EAAE,gCAAgC;oBACtC,OAAO,EACL,kGAAkG;oBACpG,IAAI,EAAE,mBAAmB;iBAC1B;aACF;YACD,WAAW,EAAE,iBAAiB;SAC/B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,MAAqB;IACxD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAClC,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,qCAAqC,CAAC;QAC7E,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,wCAAwC,CAAC;KACnF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,+BAA+B,EAAE;YAClD,IAAI,EAAE,sCAAsC;YAC5C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,OAAgD;IAEhD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE;QAC5C,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAEtE,MAAM,MAAM,GAAgC;QAC1C,gBAAgB,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QAC3D,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAC3C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7C,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW;QACrE,YAAY,EAAE,WAAW;QACzB,MAAM,EAAE;YACN,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM;YACpE,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;YACxE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;YACtE,OAAO,EAAE,QAAQ,CAAC,MAAM;YACxB,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;SACrE;QACD,KAAK;QACL,IAAI,EAAE,UAAU;KACjB,CAAC;IAEF,sBAAsB,CACpB,KAAK,CAAC,WAAW,EACjB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAClC,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,sBAAsB,CACpB,KAAK,CAAC,QAAQ,EACd,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACzB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACnC,SAAS,EAAE,GAAG,CAAC,KAAK;YACpB,UAAU,EAAE,GAAG,CAAC,EAAE;YAClB,eAAe,EAAE,GAAG,CAAC,OAAO;YAC5B,GAAG,UAAU;SACd,CAAC,CAAC,CACJ,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,wBAAwB;IACxB,qBAAqB;IACrB,yBAAyB;IACzB,mBAAmB;IACnB,iCAAiC;IACjC,kBAAkB;IAClB,iBAAiB;IACjB,0BAA0B;IAC1B,6BAA6B;IAC7B,6BAA6B;IAC7B,kBAAkB;IAClB,8BAA8B;IAC9B,gCAAgC;IAChC,SAAS;IACT,0BAA0B;IAC1B,4BAA4B;IAC5B,yBAAyB;IACzB,aAAa;IACb,kCAAkC;IAClC,+BAA+B;IAC/B,iBAAiB;IACjB,uBAAuB;IACvB,SAAS;IACT,WAAW;CACZ,CAAC","sourcesContent":["import path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n cloneJson,\n datasetRoot,\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nconst ANNUAL_SUPPLY_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst ANNUAL_SUPPLY_ROOT_FIELD =\n 'modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst NUMERIC_TEXT_WITH_SUFFIX_PATTERN = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([Ee][+-]?\\d+)?\\s+\\S.*$/u;\nconst ANNUAL_PERIOD_PATTERN =\n /(?:\\/\\s*(?:year|yr|a)\\b|\\bper\\s+(?:year|annum)\\b|\\/\\s*年|每年|年度|年供应|年产)/iu;\nconst ANNUAL_UNAVAILABLE_PATTERN =\n /\\b(?:source\\s+)?(?:production\\s+)?volume\\s+(?:unavailable|unknown|not\\s+available)\\b/iu;\nconst CJK_TEXT_PATTERN = /[\\p{Script=Han}]/u;\nconst NET_CALORIFIC_VALUE_ID = '93a60a56-a3c8-11da-a746-0800200c9a66';\nconst DEFAULT_COMPLIANCE_SYSTEM = {\n '@refObjectId': 'c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@type': 'source data set',\n '@uri': 'https://tiangong.earth/datasets/c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@version': '00.00.001',\n 'common:shortDescription': {\n '@xml:lang': 'en',\n '#text': 'Environmental Footprint (EF) 3.1',\n },\n} as const;\nconst DEFAULT_COMPLIANCE_DECLARATION = {\n 'common:referenceToComplianceSystem': DEFAULT_COMPLIANCE_SYSTEM,\n 'common:approvalOfOverallCompliance': 'Not defined',\n 'common:nomenclatureCompliance': 'Not defined',\n 'common:methodologicalCompliance': 'Not defined',\n 'common:reviewCompliance': 'Not defined',\n 'common:documentationCompliance': 'Not defined',\n 'common:qualityCompliance': 'Not defined',\n} as const;\nconst REQUIRED_COMPLIANCE_FIELDS = [\n 'common:approvalOfOverallCompliance',\n 'common:nomenclatureCompliance',\n 'common:methodologicalCompliance',\n 'common:reviewCompliance',\n 'common:documentationCompliance',\n 'common:qualityCompliance',\n] as const;\n\ntype AnnualSupplyStatus = 'existing' | 'completed' | 'blocked' | 'skipped';\n\nexport type ProcessRequiredFieldIssue = {\n code: string;\n message: string;\n path: string;\n};\n\nexport type ProcessRequiredFieldCompletion = {\n field_path: string;\n source: 'existing' | 'evidence' | 'placeholder_repair' | 'required_structure_repair';\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string | null;\n unit: string | null;\n reference_exchange_internal_id: string | null;\n basis: string;\n};\n\nexport type ProcessRequiredFieldsRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: string | null;\n status: AnnualSupplyStatus;\n issues: ProcessRequiredFieldIssue[];\n completions: ProcessRequiredFieldCompletion[];\n};\n\nexport type ProcessRequiredFieldsReport = {\n generated_at_utc: string;\n input_path: string;\n out_path: string;\n out_dir: string | null;\n status: 'completed' | 'completed_with_blockers';\n default_unit: string;\n counts: {\n total: number;\n processes: number;\n completed: number;\n existing: number;\n blocked: number;\n skipped: number;\n };\n files: {\n output_rows: string;\n report: string | null;\n evidence: string | null;\n };\n rows: ProcessRequiredFieldsRowReport[];\n};\n\nexport type RunProcessRequiredFieldsCompleteOptions = {\n inputPath: string;\n outPath: string;\n outDir?: string | null;\n defaultUnit?: string | null;\n flowInputPath?: string | null;\n rawInput?: unknown;\n rawFlowInput?: unknown;\n now?: Date;\n};\n\ntype CompletionContext = {\n defaultUnit: string;\n flowUnitById?: Map<string, string>;\n};\n\ntype AnnualSupplyEvidenceValue = {\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string;\n unit: string;\n basis: string;\n};\n\nfunction normalizeUnit(value: string | null | undefined): string {\n const token = value?.trim();\n return token || 'unit';\n}\n\nfunction sourceLanguageForText(value: string, fallback = 'en'): string {\n return CJK_TEXT_PATTERN.test(value) ? 'zh' : fallback;\n}\n\nfunction textValue(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction asList(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n return value === undefined || value === null ? [] : [value];\n}\n\nfunction valueAtPath(root: unknown, pathExpression: string): unknown {\n let current = root;\n for (const segment of pathExpression.split('.')) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction annualSupplyItems(value: unknown): Array<{ '#text': string; '@xml:lang': string }> {\n return asList(value).filter((item): item is { '#text': string; '@xml:lang': string } => {\n return (\n isRecord(item) && typeof item['#text'] === 'string' && typeof item['@xml:lang'] === 'string'\n );\n });\n}\n\nfunction isValidAnnualSupplyVolume(value: unknown): boolean {\n const items = annualSupplyItems(value);\n return (\n items.length > 0 &&\n items.every((item) => {\n const text = item['#text'].trim();\n return (\n !ANNUAL_UNAVAILABLE_PATTERN.test(text) &&\n NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) &&\n ANNUAL_PERIOD_PATTERN.test(text)\n );\n })\n );\n}\n\nfunction isValidReview(value: unknown): boolean {\n return asList(value).some((item) => isRecord(item) && Boolean(firstNonEmpty(item['@type'])));\n}\n\nfunction isValidComplianceDeclaration(value: unknown): boolean {\n return asList(value).some((item) => {\n if (!isRecord(item)) {\n return false;\n }\n const complianceSystem = isRecord(item['common:referenceToComplianceSystem'])\n ? item['common:referenceToComplianceSystem']\n : {};\n return (\n Boolean(firstNonEmpty(complianceSystem['@refObjectId'])) &&\n REQUIRED_COMPLIANCE_FIELDS.every((field) => Boolean(firstNonEmpty(item[field])))\n );\n });\n}\n\nexport function collectProcessRequiredFieldIssues(\n payload: JsonObject,\n): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const dataSources = isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)\n ? modelling.dataSourcesTreatmentAndRepresentativeness\n : null;\n if (!dataSources) {\n return [\n {\n code: 'process_data_sources_treatment_missing',\n message: 'Process payload must include dataSourcesTreatmentAndRepresentativeness.',\n path: 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness',\n },\n ];\n }\n\n const issues: ProcessRequiredFieldIssue[] = [];\n const validation = isRecord(modelling.validation) ? modelling.validation : {};\n if (!isValidReview(validation.review)) {\n issues.push({\n code: 'process_validation_review_missing',\n message: 'Process payload must include modellingAndValidation.validation.review.',\n path: 'processDataSet.modellingAndValidation.validation.review',\n });\n }\n\n const complianceDeclarations = isRecord(modelling.complianceDeclarations)\n ? modelling.complianceDeclarations\n : {};\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n issues.push({\n code: 'process_compliance_declaration_missing',\n message:\n 'Process payload must include modellingAndValidation.complianceDeclarations.compliance.',\n path: 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n });\n }\n\n const annualSupply = dataSources.annualSupplyOrProductionVolume;\n if (isValidAnnualSupplyVolume(annualSupply)) {\n return issues;\n }\n\n const items = annualSupplyItems(annualSupply);\n if (items.length === 0) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (items.some((item) => ANNUAL_UNAVAILABLE_PATTERN.test(item['#text'].trim()))) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (\n items.every((item) => NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(item['#text'].trim())) &&\n items.some((item) => !ANNUAL_PERIOD_PATTERN.test(item['#text'].trim()))\n ) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_not_annualized',\n message:\n 'annualSupplyOrProductionVolume must express an annualized amount such as \"3.6 MJ/year\" or \"3.6 MJ/年\", not a reference-flow description.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_invalid',\n message:\n 'annualSupplyOrProductionVolume must start with a real number followed by a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n}\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectPlaceholderIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: ProcessRequiredFieldIssue[],\n): void {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (\n (pathSegments.at(-1) === 'common:referenceYear' && normalized === '9999') ||\n normalized.includes('tidas_import_placeholder') ||\n normalized.includes('tidas_import_trace_v1') ||\n normalized.includes('not declared in source package') ||\n normalized.includes('source package metadata not declared') ||\n normalized === '<null>' ||\n /(^|[\\s\"'`])(?:\\/users\\/|\\/home\\/|[a-z]:\\\\)/iu.test(value) ||\n normalized.includes('placeholder.example') ||\n normalized.includes('pending confirmation') ||\n /00000000-0000-0000-0000-0000000000[0-9a-f]{2}/u.test(normalized)\n ) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectPlaceholderIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectPlaceholderIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nexport function collectProcessPlaceholderIssues(payload: JsonObject): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(root, ['processDataSet'], issues);\n return issues;\n}\n\nfunction hasPlaceholderContent(value: unknown): boolean {\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(value, [], issues);\n return issues.length > 0;\n}\n\nfunction removePlaceholderField(\n parent: JsonObject,\n key: string,\n fieldPath: string,\n completions: ProcessRequiredFieldCompletion[],\n): void {\n if (!hasPlaceholderContent(parent[key])) {\n return;\n }\n delete parent[key];\n completions.push({\n field_path: fieldPath,\n source: 'placeholder_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis:\n 'Removed placeholder review metadata because the dataset is marked Not reviewed and no completed review evidence is present.',\n });\n}\n\nfunction repairPlaceholderReviewMetadata(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const validation = isRecord(modelling.validation) ? modelling.validation : null;\n if (!validation) {\n return [];\n }\n\n const completions: ProcessRequiredFieldCompletion[] = [];\n const validationPath = 'processDataSet.modellingAndValidation.validation';\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation, key, `${validationPath}.${key}`, completions);\n }\n\n if (isRecord(validation.review)) {\n const reviewPath = `${validationPath}.review`;\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation.review, key, `${reviewPath}.${key}`, completions);\n }\n }\n\n return completions;\n}\n\nfunction addRequiredStructureCompletion(\n completions: ProcessRequiredFieldCompletion[],\n fieldPath: string,\n basis: string,\n): void {\n completions.push({\n field_path: fieldPath,\n source: 'required_structure_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis,\n });\n}\n\nfunction repairRequiredProcessStructures(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const completions: ProcessRequiredFieldCompletion[] = [];\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n\n if (!isRecord(modelling.validation)) {\n modelling.validation = {};\n }\n const validation = modelling.validation as JsonObject;\n if (!isValidReview(validation.review)) {\n validation.review = {\n '@type': 'Not reviewed',\n };\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.validation.review',\n 'Inserted a conservative Not reviewed marker because UI roundtrip or source data omitted the required validation.review structure.',\n );\n }\n\n if (!isRecord(modelling.complianceDeclarations)) {\n modelling.complianceDeclarations = {};\n }\n const complianceDeclarations = modelling.complianceDeclarations as JsonObject;\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n complianceDeclarations.compliance = cloneJson(DEFAULT_COMPLIANCE_DECLARATION);\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n 'Inserted a conservative Not defined compliance declaration against EF 3.1 because UI roundtrip or source data omitted the required compliance structure.',\n );\n }\n\n return completions;\n}\n\nfunction processRootForMutation(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n return payload;\n}\n\nfunction selectReferenceExchange(root: JsonObject): JsonObject | null {\n const exchangesRoot = isRecord(root.exchanges) ? root.exchanges : {};\n const exchanges = asList(exchangesRoot.exchange).filter(isRecord);\n const processInfo = isRecord(root.processInformation) ? root.processInformation : {};\n const quantitativeReference = isRecord(processInfo.quantitativeReference)\n ? processInfo.quantitativeReference\n : {};\n const referenceId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n\n const byReferenceId = referenceId\n ? exchanges.find((exchange) => firstNonEmpty(exchange['@dataSetInternalID']) === referenceId)\n : null;\n if (byReferenceId) {\n return byReferenceId;\n }\n\n return (\n exchanges.find((exchange) => exchange.quantitativeReference === true) ??\n exchanges.find(\n (exchange) => String(exchange.exchangeDirection ?? '').toLowerCase() === 'output',\n ) ??\n null\n );\n}\n\nfunction localizedTextIncludes(value: unknown, pattern: RegExp): boolean {\n return annualSupplyItems(value).some((item) => pattern.test(item['#text']));\n}\n\nfunction inferSpecificUnitFromFlowPayload(payload: JsonObject): string | null {\n const root = datasetRoot(payload, 'flow');\n const flowPropertiesRoot = isRecord(root.flowProperties) ? root.flowProperties : {};\n const flowProperties = asList(flowPropertiesRoot.flowProperty).filter(isRecord);\n for (const flowProperty of flowProperties) {\n const direct = firstNonEmpty(\n flowProperty.unit,\n flowProperty.referenceUnit,\n flowProperty.flowUnit,\n );\n if (direct) {\n return direct;\n }\n\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n }\n\n const flowInformation = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const classificationInformation = isRecord(dataSetInformation.classificationInformation)\n ? dataSetInformation.classificationInformation\n : {};\n const classification = isRecord(classificationInformation['common:classification'])\n ? classificationInformation['common:classification']\n : {};\n const classificationClasses = classification['common:class'];\n if (\n localizedTextIncludes(classificationClasses, /Electrical energy|electricity|交流电|电力|电能/iu)\n ) {\n return 'MJ';\n }\n\n return null;\n}\n\nfunction buildFlowUnitIndex(\n flowRows: DatasetRowInput[],\n fallbackUnit: string,\n): Map<string, string> {\n const index = new Map<string, string>();\n for (const row of flowRows) {\n if (row.kind !== 'flow' || !row.id) {\n continue;\n }\n const inferred = inferSpecificUnitFromFlowPayload(row.payload);\n if (inferred && inferred !== fallbackUnit) {\n index.set(row.id, inferred);\n }\n }\n return index;\n}\n\nfunction inferUnitFromReferenceExchange(\n exchange: JsonObject,\n fallbackOrContext: string | CompletionContext,\n): string {\n const context =\n typeof fallbackOrContext === 'string' ? { defaultUnit: fallbackOrContext } : fallbackOrContext;\n const fallbackUnit = context.defaultUnit;\n const flowRef = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const refObjectId = firstNonEmpty(flowRef['@refObjectId']);\n if (refObjectId) {\n const indexedUnit = context.flowUnitById?.get(refObjectId);\n if (indexedUnit) {\n return indexedUnit;\n }\n }\n\n const direct = firstNonEmpty(exchange.unit, exchange.referenceUnit, exchange.flowUnit);\n if (direct) {\n return direct;\n }\n\n const shortDescriptions = flowRef['common:shortDescription'];\n if (\n localizedTextIncludes(\n shortDescriptions,\n /MJ|net calorific|lower calorific|Electrical energy|electricity|净热值|低位发热|交流电|电力|电能/iu,\n )\n ) {\n return 'MJ';\n }\n\n const flowProperty = isRecord(exchange.flowProperty) ? exchange.flowProperty : {};\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n refObjectId === NET_CALORIFIC_VALUE_ID ||\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n\n return fallbackUnit;\n}\n\nfunction buildAnnualSupplyValue(\n amount: string,\n unit: string,\n): Array<{\n '#text': string;\n '@xml:lang': string;\n}> {\n return [{ '@xml:lang': 'en', '#text': `${amount} ${unit}/year` }];\n}\n\nfunction annualSupplyTextParts(value: string): { amount: string; unit: string } | null {\n const match = /^\\s*([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)\\s+(\\S.*)$/u.exec(value);\n return match ? { amount: match[1] as string, unit: (match[2] as string).trim() } : null;\n}\n\nfunction annualSupplyValueFromText(value: string): AnnualSupplyEvidenceValue | null {\n const text = value.trim();\n if (!NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) || !ANNUAL_PERIOD_PATTERN.test(text)) {\n return null;\n }\n const parts = annualSupplyTextParts(text) as { amount: string; unit: string };\n return {\n value: [{ '@xml:lang': sourceLanguageForText(text), '#text': text }],\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a complete annual supply / production volume text value.',\n };\n}\n\nfunction normalizeAnnualSupplyEvidenceValue(\n candidate: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (typeof candidate === 'string') {\n return annualSupplyValueFromText(candidate);\n }\n\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n const amount = String(candidate);\n return {\n value: buildAnnualSupplyValue(amount, context.defaultUnit),\n amount,\n unit: context.defaultUnit,\n basis:\n 'Evidence provided a numeric annual supply / production volume; the configured default unit was applied.',\n };\n }\n\n if (isValidAnnualSupplyVolume(candidate)) {\n const value = [\n annualSupplyItems(candidate).map((item) => ({\n '@xml:lang': item['@xml:lang'],\n '#text': item['#text'].trim(),\n }))[0]!,\n ];\n const parts = annualSupplyTextParts(value[0]!['#text']) as { amount: string; unit: string };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis:\n 'Evidence provided a validated source-language annual supply / production volume value.',\n };\n }\n\n if (!isRecord(candidate)) {\n return null;\n }\n\n for (const key of [\n 'value',\n 'text',\n 'value_text',\n 'valueText',\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n ]) {\n const nested = normalizeAnnualSupplyEvidenceValue(candidate[key], context);\n if (nested) {\n return nested;\n }\n }\n\n const preferredLanguage = textValue(\n candidate.source_language ??\n candidate.sourceLanguage ??\n candidate.lang ??\n candidate['@xml:lang'],\n )?.toLowerCase();\n const english = textValue(candidate.en ?? candidate.english);\n const chinese = textValue(candidate.zh ?? candidate.chinese ?? candidate['zh-CN']);\n const localized = [\n english ? { '@xml:lang': 'en', '#text': english } : null,\n chinese ? { '@xml:lang': 'zh', '#text': chinese } : null,\n ].filter((item): item is { '#text': string; '@xml:lang': string } => Boolean(item));\n if (localized.length > 0 && isValidAnnualSupplyVolume(localized)) {\n const selected =\n localized.find((item) => item['@xml:lang'].toLowerCase() === preferredLanguage) ??\n localized[0]!;\n const value = [selected];\n const parts = annualSupplyTextParts(selected['#text']) as {\n amount: string;\n unit: string;\n };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a language-specific annual supply / production volume text value.',\n };\n }\n\n const amount = textValue(candidate.amount ?? candidate.value_amount ?? candidate.valueAmount);\n const unit = normalizeUnit(\n textValue(\n candidate.unit ?? candidate.uom ?? candidate.reference_unit ?? candidate.referenceUnit,\n ) ?? context.defaultUnit,\n );\n if (amount) {\n return {\n value: buildAnnualSupplyValue(amount, unit),\n amount,\n unit,\n basis:\n 'Evidence provided annual supply / production volume amount and unit as structured fields.',\n };\n }\n\n return null;\n}\n\nfunction isAnnualSupplyEvidencePath(pathExpression: string | null): boolean {\n if (!pathExpression) {\n return false;\n }\n return (\n pathExpression === ANNUAL_SUPPLY_FIELD ||\n pathExpression === ANNUAL_SUPPLY_ROOT_FIELD ||\n pathExpression.endsWith(`.${ANNUAL_SUPPLY_ROOT_FIELD}`) ||\n pathExpression.endsWith('.annualSupplyOrProductionVolume')\n );\n}\n\nfunction fieldPathFromEvidenceEntry(entry: JsonObject): string | null {\n return firstNonEmpty(\n entry.field_path,\n entry.fieldPath,\n entry.path,\n entry.field,\n entry.target_path,\n entry.targetPath,\n );\n}\n\nfunction findAnnualSupplyEvidenceEntry(\n container: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (!isRecord(container)) {\n return null;\n }\n\n const directPath = fieldPathFromEvidenceEntry(container);\n if (isAnnualSupplyEvidencePath(directPath)) {\n const directValue = normalizeAnnualSupplyEvidenceValue(container, context);\n if (directValue) {\n return directValue;\n }\n }\n\n for (const key of [\n 'field_values',\n 'fieldValues',\n 'field_bindings',\n 'fieldBindings',\n 'bindings',\n ]) {\n const entries = asList(container[key]).filter(isRecord);\n for (const entry of entries) {\n if (!isAnnualSupplyEvidencePath(fieldPathFromEvidenceEntry(entry))) {\n continue;\n }\n const value = normalizeAnnualSupplyEvidenceValue(entry, context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction findAnnualSupplyEvidenceValue(\n row: JsonObject,\n payload: JsonObject,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n const explicitPaths = [\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n 'required_fields.annualSupplyOrProductionVolume',\n 'requiredFields.annualSupplyOrProductionVolume',\n 'authoring.required_fields.annualSupplyOrProductionVolume',\n 'authoring.requiredFields.annualSupplyOrProductionVolume',\n 'process_authoring.required_fields.annualSupplyOrProductionVolume',\n 'processAuthoring.requiredFields.annualSupplyOrProductionVolume',\n ];\n for (const source of [row, payload]) {\n for (const explicitPath of explicitPaths) {\n const value = normalizeAnnualSupplyEvidenceValue(valueAtPath(source, explicitPath), context);\n if (value) {\n return value;\n }\n }\n }\n\n const evidencePaths = [\n 'evidence_manifest',\n 'evidenceManifest',\n 'authoring_evidence',\n 'authoringEvidence',\n 'process_authoring.evidence_manifest',\n 'processAuthoring.evidenceManifest',\n ];\n for (const source of [row, payload]) {\n for (const evidencePath of evidencePaths) {\n const value = findAnnualSupplyEvidenceEntry(valueAtPath(source, evidencePath), context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction ensureDataSources(root: JsonObject): JsonObject {\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n if (!isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)) {\n modelling.dataSourcesTreatmentAndRepresentativeness = {};\n }\n return modelling.dataSourcesTreatmentAndRepresentativeness as JsonObject;\n}\n\nfunction cloneRowWithPayload(row: DatasetRowInput): { row: JsonObject; payload: JsonObject } {\n const clonedRow = cloneJson(row.row);\n if (isRecord(clonedRow.json_ordered)) {\n return { row: clonedRow, payload: clonedRow.json_ordered };\n }\n if (isRecord(clonedRow.jsonOrdered)) {\n return { row: clonedRow, payload: clonedRow.jsonOrdered };\n }\n if (isRecord(clonedRow.json)) {\n return { row: clonedRow, payload: clonedRow.json };\n }\n if (isRecord(clonedRow.payload)) {\n return { row: clonedRow, payload: clonedRow.payload };\n }\n if (isRecord(clonedRow.process)) {\n return { row: clonedRow, payload: clonedRow.process };\n }\n return { row: clonedRow, payload: clonedRow };\n}\n\nfunction completeProcessRow(\n row: DatasetRowInput,\n context: CompletionContext,\n): { row: JsonObject; report: ProcessRequiredFieldsRowReport } {\n const { row: clonedRow, payload } = cloneRowWithPayload(row);\n if (row.kind !== 'process') {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'skipped',\n issues: [],\n completions: [],\n },\n };\n }\n\n const root = processRootForMutation(payload);\n const placeholderCompletions = repairPlaceholderReviewMetadata(root);\n const requiredStructureCompletions = repairRequiredProcessStructures(root);\n const repairCompletions = [...placeholderCompletions, ...requiredStructureCompletions];\n const existingIssues = collectProcessRequiredFieldIssues(payload);\n const placeholderIssues = collectProcessPlaceholderIssues(payload);\n\n if (existingIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: repairCompletions.length > 0 ? 'completed' : 'existing',\n issues: [],\n completions: repairCompletions,\n },\n };\n }\n\n if (placeholderIssues.length > 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [...existingIssues, ...placeholderIssues],\n completions: repairCompletions,\n },\n };\n }\n\n const evidenceValue = findAnnualSupplyEvidenceValue(clonedRow, payload, context);\n if (evidenceValue) {\n const dataSources = ensureDataSources(root);\n dataSources.annualSupplyOrProductionVolume = evidenceValue.value;\n const completion: ProcessRequiredFieldCompletion = {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'evidence',\n value: evidenceValue.value,\n amount: evidenceValue.amount,\n unit: evidenceValue.unit,\n reference_exchange_internal_id: null,\n basis: evidenceValue.basis,\n };\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n }\n\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [\n ...existingIssues,\n {\n code: 'annual_supply_evidence_missing',\n message:\n 'Could not complete annualSupplyOrProductionVolume because no source evidence value was provided.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ],\n completions: repairCompletions,\n },\n };\n}\n\nfunction buildFiles(outPath: string, outDir: string | null): ProcessRequiredFieldsReport['files'] {\n if (!outDir) {\n return {\n output_rows: path.resolve(outPath),\n report: null,\n evidence: null,\n };\n }\n const resolved = path.resolve(outDir);\n return {\n output_rows: path.resolve(outPath),\n report: path.join(resolved, 'outputs', 'process-required-fields-report.json'),\n evidence: path.join(resolved, 'outputs', 'process-required-fields-evidence.jsonl'),\n };\n}\n\nfunction requireOutputPath(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new CliError('Missing required --out value.', {\n code: 'PROCESS_REQUIRED_FIELDS_OUT_REQUIRED',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nexport async function runProcessRequiredFieldsComplete(\n options: RunProcessRequiredFieldsCompleteOptions,\n): Promise<ProcessRequiredFieldsReport> {\n const outPath = requireOutputPath(options.outPath);\n const outDir = options.outDir?.trim() ? options.outDir.trim() : null;\n const defaultUnit = normalizeUnit(options.defaultUnit);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const flowRows = options.flowInputPath?.trim()\n ? materializeDatasetRows(options.flowInputPath, options.rawFlowInput)\n : [];\n const flowUnitById = buildFlowUnitIndex(flowRows, defaultUnit);\n const completed = rows.map((row) => completeProcessRow(row, { defaultUnit, flowUnitById }));\n const rowReports = completed.map((item) => item.report);\n const files = buildFiles(outPath, outDir);\n const blockers = rowReports.filter((row) => row.status === 'blocked');\n\n const report: ProcessRequiredFieldsReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n out_path: path.resolve(outPath),\n out_dir: outDir ? path.resolve(outDir) : null,\n status: blockers.length > 0 ? 'completed_with_blockers' : 'completed',\n default_unit: defaultUnit,\n counts: {\n total: rowReports.length,\n processes: rowReports.filter((row) => row.type === 'process').length,\n completed: rowReports.filter((row) => row.status === 'completed').length,\n existing: rowReports.filter((row) => row.status === 'existing').length,\n blocked: blockers.length,\n skipped: rowReports.filter((row) => row.status === 'skipped').length,\n },\n files,\n rows: rowReports,\n };\n\n writeJsonLinesArtifact(\n files.output_rows,\n completed.map((item) => item.row),\n );\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.evidence) {\n writeJsonLinesArtifact(\n files.evidence,\n rowReports.flatMap((row) =>\n row.completions.map((completion) => ({\n row_index: row.index,\n dataset_id: row.id,\n dataset_version: row.version,\n ...completion,\n })),\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ANNUAL_SUPPLY_ROOT_FIELD,\n annualSupplyTextParts,\n annualSupplyValueFromText,\n cloneRowWithPayload,\n collectProcessRequiredFieldIssues,\n completeProcessRow,\n ensureDataSources,\n fieldPathFromEvidenceEntry,\n findAnnualSupplyEvidenceValue,\n findAnnualSupplyEvidenceEntry,\n buildFlowUnitIndex,\n inferUnitFromReferenceExchange,\n inferSpecificUnitFromFlowPayload,\n issuePath,\n isAnnualSupplyEvidencePath,\n isValidComplianceDeclaration,\n isValidAnnualSupplyVolume,\n isValidReview,\n normalizeAnnualSupplyEvidenceValue,\n repairRequiredProcessStructures,\n requireOutputPath,\n selectReferenceExchange,\n textValue,\n valueAtPath,\n};\n"]}
@@ -209,7 +209,7 @@ const RULESETS_BY_ID = Object.fromEntries(RULESETS.map((item) => [item.id, item]
209
209
  const RULES_BY_ID = Object.fromEntries(RUNTIME_RULES.map((item) => [item.id, item]));
210
210
  const LOCAL_RULE_ID_MAP = {
211
211
  'process-authoring/strict': {
212
- process_missing_bilingual_base_name: 'tidas.process.name.base-name.align-reference-flow',
212
+ process_missing_source_base_name: 'tidas.process.name.base-name.align-reference-flow',
213
213
  process_missing_functional_unit: 'tidas.process.quantitative-reference.required',
214
214
  process_missing_quantitative_reference: 'tidas.process.quantitative-reference.required',
215
215
  process_missing_exchange_amount: 'tidas.process.exchange.amount.required',
@@ -229,7 +229,7 @@ const LOCAL_RULE_ID_MAP = {
229
229
  },
230
230
  'flow-authoring/strict': {
231
231
  missing_type_of_dataset: 'tidas.flow.type.required',
232
- elementary_flow_in_flow_review: 'tidas.flow.type.required',
232
+ elementary_flow_in_flow_qa: 'tidas.flow.type.required',
233
233
  methodology_invalid_type_of_dataset: 'tidas.flow.type.required',
234
234
  missing_name_text: 'tidas.flow.name.base-name.technical',
235
235
  name_contains_emergy: 'tidas.flow.name.base-name.technical',