88 lines
3.6 KiB
JavaScript
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);
|
|
}
|