Files
vda-to-edifact-converter/verify-mapping.js
2026-03-13 09:53:40 +01:00

88 lines
3.6 KiB
JavaScript

const fs = require('fs');
const path = require('path');
// Mock window context for browsers
global.window = {};
global.EDIBridge = {};
// Load dependencies
function loadScript(filePath) {
const content = fs.readFileSync(path.join('C:/Users/matthias.hoesch/.gemini/antigravity/scratch/vda-to-edifact-converter', filePath), 'utf8');
eval(content);
}
loadScript('js/edifact-logic.js');
loadScript('js/vda-parser.js');
loadScript('js/config-parser.js');
loadScript('js/vda4913-to-desadv.js');
const VDA4913ToDESADV = global.window.EDIBridge.VDA4913ToDESADV;
// Test Data: 2 palettes, 4 cartons
const vdaInput = `71101SENDERID RECEIVERID 00001240520
71201TRN001 1 CARRIERID TRUCK123
71301DLV001 DOCK1 240520CONSIGNEE
71401MAT-CUSTOMER-001 MAT-SUPPLIER-001 000000040000PCE
71501CARTON-MAT 0000000004 000000000100000004
71501PALLET-MAT 0000000002 000000100100001002
719010000006`;
const config = [
{ type: 'rff', key: 'SENDERID', ank: '12345' }
];
const weights = {
pacWeights: { 'CARTON-MAT': 1, 'PALLET-MAT': 15 },
pacDims: { 'CARTON-MAT': { ln: 40, wd: 30, ht: 20 }, 'PALLET-MAT': { ln: 120, wd: 80, ht: 100 } }
};
const nadData = {
SE: { id: 'SENDERID', name: 'Seller' },
BY: { id: 'BUYERID', name: 'Buyer' },
ST: { id: 'SHIPTOID', name: 'ShipTo' }
};
try {
const result = VDA4913ToDESADV.convert(vdaInput, nadData, weights, config);
console.log("--- CONVERSION SUCCESSFUL ---");
// console.log(result);
// Verification logic
const segments = result.split("'");
// Check GIN ML declaring palettes
const paletteDeclares = segments.filter(s => s.includes('PALLET-MAT') - 1 && segments[segments.indexOf(s) + 1]?.startsWith('GIN+ML')).map(s => {
const idx = segments.indexOf(s);
for (let j = idx; j < idx + 10; j++) if (segments[j]?.startsWith('GIN+ML')) return segments[j].split('+')[2];
return null;
}).filter(v => v);
const ginMLs = segments.filter(s => s.startsWith('GIN+ML')).map(s => s.split('+')[2]);
const aciRefs = segments.filter(s => s.startsWith('RFF+ACI')).map(s => s.split(':')[1]);
const ginAWs = segments.filter(s => s.startsWith('GIN+AW')).map(s => s.split('+')[2]);
console.log("\n--- VERIFICATION RESULTS ---");
console.log("Palettes Declared (GIN+ML):", ginMLs.filter(s => s.endsWith('1001') || s.endsWith('1002')).join(', '));
console.log("Inner ACI References:", aciRefs.join(', '));
console.log("Inner SSCCs (GIN+AW references):", ginAWs.length);
// B5/B6 Verification: Count of RFF+ACI should match GIN+ML of outers
const palettes = ['UN123451001', 'UN123451002'];
palettes.forEach(p => {
const hasML = ginMLs.includes(p);
const hasACI = aciRefs.includes(p);
console.log(`Checking Palette ${p}: ML=${hasML}, ACI=${hasACI}`);
if (!hasML || !hasACI) {
console.error(`FAIL: Consistency mismatch for ${p}`);
process.exit(1);
}
});
console.log("PASS: Master Reference Consistency (B5/B6) verified.");
process.exit(0);
} catch (e) {
console.error("CONVERSION FAILED:");
console.error(e);
process.exit(1);
}