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); }